diff --git a/changelog.d/312.feature b/changelog.d/312.feature new file mode 100644 index 0000000000..e3c54bb1ae --- /dev/null +++ b/changelog.d/312.feature @@ -0,0 +1 @@ +Room details: implement custom designs for DMs. 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 67038001e9..f86b9952a8 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,6 +34,7 @@ import io.element.android.libraries.architecture.BackstackNode import io.element.android.libraries.architecture.animation.rememberDefaultTransitionHandler import io.element.android.libraries.architecture.createNode import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import kotlinx.parcelize.Parcelize @@ -64,24 +65,23 @@ class RoomDetailsFlowNode @AssistedInject constructor( override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node { return when (navTarget) { NavTarget.RoomDetails -> { - val callback = object : RoomDetailsNode.Callback { + val roomDetailsCallback = object : RoomDetailsNode.Callback { override fun openRoomMemberList() { backstack.push(NavTarget.RoomMemberList) } } - createNode(buildContext, listOf(callback)) + createNode(buildContext, listOf(roomDetailsCallback)) } NavTarget.RoomMemberList -> { - val callback = object : RoomMemberListNode.Callback { + val roomMemberListCallback = object : RoomMemberListNode.Callback { override fun openRoomMemberDetails(roomMember: RoomMember) { backstack.push(NavTarget.RoomMemberDetails(roomMember)) } } - createNode(buildContext, listOf(callback)) + createNode(buildContext, listOf(roomMemberListCallback)) } is NavTarget.RoomMemberDetails -> { - val inputs = RoomMemberDetailsNode.Inputs(navTarget.roomMember) - createNode(buildContext, listOf(inputs)) + createNode(buildContext, listOf(RoomMemberDetailsNode.Inputs(navTarget.roomMember))) } } } 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 f20a8e9509..46e76a5f8a 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 @@ -31,6 +31,9 @@ import io.element.android.libraries.androidutils.system.startSharePlainTextInten 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 timber.log.Timber +import io.element.android.libraries.androidutils.R as AndroidUtilsR @ContributesNode(RoomScope::class) class RoomDetailsNode @AssistedInject constructor( @@ -44,10 +47,10 @@ class RoomDetailsNode @AssistedInject constructor( fun openRoomMemberList() } - private val callback = plugins().firstOrNull() + private val callbacks = plugins() private fun openRoomMemberList() { - callback?.openRoomMemberList() + callbacks.forEach { it.openRoomMemberList() } } private fun onShareRoom(context: Context) { @@ -64,6 +67,21 @@ class RoomDetailsNode @AssistedInject constructor( } } + private fun onShareMember(context: Context, member: RoomMember) { + val permalinkResult = PermalinkBuilder.permalinkForUser(member.userId) + permalinkResult.onSuccess { permalink -> + startSharePlainTextIntent( + context = context, + 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) + } + } + @Composable override fun View(modifier: Modifier) { val context = LocalContext.current @@ -73,6 +91,7 @@ class RoomDetailsNode @AssistedInject constructor( modifier = modifier, goBack = { navigateUp() }, onShareRoom = { onShareRoom(context) }, + onShareMember = { onShareMember(context, it) }, openRoomMemberList = ::openRoomMemberList, ) } 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 48dce4609c..45e978b80a 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 @@ -25,6 +25,8 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.Presenter +import io.element.android.libraries.matrix.api.MatrixClient +import io.element.android.libraries.matrix.api.core.SessionId import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import kotlinx.coroutines.Dispatchers @@ -33,6 +35,7 @@ import kotlinx.coroutines.withContext import javax.inject.Inject class RoomDetailsPresenter @Inject constructor( + private val sessionId: SessionId, private val room: MatrixRoom, private val roomMembershipObserver: RoomMembershipObserver, ) : Presenter { @@ -46,6 +49,7 @@ class RoomDetailsPresenter @Inject constructor( var error by remember { mutableStateOf(null) } + var memberCount: Async by remember { mutableStateOf(Async.Loading()) } LaunchedEffect(Unit) { withContext(Dispatchers.IO) { @@ -56,6 +60,14 @@ class RoomDetailsPresenter @Inject constructor( ) } } + + val dmMember = room.getDmMember() + val roomType = if (dmMember != null) { + RoomDetailsType.Dm(dmMember) + } else { + RoomDetailsType.Room + } + fun handleEvents(event: RoomDetailsEvent) { when (event) { is RoomDetailsEvent.LeaveRoom -> { @@ -78,7 +90,6 @@ class RoomDetailsPresenter @Inject constructor( } } - return RoomDetailsState( roomId = room.roomId.value, roomName = room.name ?: room.displayName, @@ -89,7 +100,8 @@ class RoomDetailsPresenter @Inject constructor( isEncrypted = room.isEncrypted, displayLeaveRoomWarning = leaveRoomWarning, error = error, - eventSink = ::handleEvents + roomType = roomType, + 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 a9d3dc2fb1..f8fed122de 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 @@ -20,6 +20,7 @@ import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.isLoading import io.element.android.libraries.matrix.api.room.MatrixRoom +import io.element.android.libraries.matrix.api.room.RoomMember data class RoomDetailsState( val roomId: String, @@ -31,9 +32,15 @@ data class RoomDetailsState( val isEncrypted: Boolean, val displayLeaveRoomWarning: LeaveRoomWarning?, val error: RoomDetailsError?, + val roomType: RoomDetailsType, val eventSink: (RoomDetailsEvent) -> Unit ) +sealed interface RoomDetailsType { + object Room : RoomDetailsType + data class Dm(val roomMember: RoomMember) : RoomDetailsType +} + sealed class LeaveRoomWarning { object Generic : LeaveRoomWarning() object PrivateRoom : LeaveRoomWarning() 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 2629d76aed..61b9d310af 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 @@ -18,6 +18,9 @@ package io.element.android.features.roomdetails.impl import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.architecture.Async +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 open class RoomDetailsStateProvider : PreviewParameterProvider { override val values: Sequence @@ -27,10 +30,32 @@ open class RoomDetailsStateProvider : PreviewParameterProvider aRoomDetailsState().copy(isEncrypted = false), aRoomDetailsState().copy(roomAlias = null), aRoomDetailsState().copy(memberCount = Async.Failure(Throwable())), + aRoomDetailsState().copy(roomType = RoomDetailsType.Dm(aDmRoomMember()), roomName = "Daniel"), + aRoomDetailsState().copy(roomType = RoomDetailsType.Dm(aDmRoomMember(isIgnored = true)), roomName = "Daniel"), // Add other state here ) } +fun aDmRoomMember( + userId: UserId = UserId("@daniel:domain.com"), + displayName: String? = "Daniel", + avatarUrl: String? = null, + membership: RoomMembershipState = RoomMembershipState.JOIN, + isNameAmbiguous: Boolean = false, + powerLevel: Long = 0, + normalizedPowerLevel: Long = powerLevel, + isIgnored: Boolean = false, +) = RoomMember( + userId = userId, + displayName = displayName, + avatarUrl = avatarUrl, + membership = membership, + isNameAmbiguous = isNameAmbiguous, + powerLevel = powerLevel, + normalizedPowerLevel = normalizedPowerLevel, + isIgnored = isIgnored, +) + fun aRoomDetailsState() = RoomDetailsState( roomId = "a room id", roomName = "Marketing", @@ -45,5 +70,6 @@ fun aRoomDetailsState() = RoomDetailsState( isEncrypted = true, displayLeaveRoomWarning = null, error = null, + roomType = RoomDetailsType.Room, 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 a4e7c8f77e..b9266cd8ca 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 @@ -42,6 +42,9 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import io.element.android.features.roomdetails.impl.members.details.BlockSection +import io.element.android.features.roomdetails.impl.members.details.RoomMemberHeaderSection +import io.element.android.features.roomdetails.impl.members.details.RoomMemberShareSection import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.isLoading import io.element.android.libraries.designsystem.ElementTextStyles @@ -59,6 +62,7 @@ import io.element.android.libraries.designsystem.theme.LocalColors 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.room.RoomMember import io.element.android.libraries.ui.strings.R as StringR @OptIn(ExperimentalMaterial3Api::class) @@ -67,9 +71,15 @@ fun RoomDetailsView( state: RoomDetailsState, goBack: () -> Unit, onShareRoom: () -> Unit, + onShareMember: (RoomMember) -> Unit, openRoomMemberList: () -> Unit, modifier: Modifier = Modifier, ) { + + fun onShareMember() { + onShareMember((state.roomType as RoomDetailsType.Dm).roomMember) + } + Scaffold( modifier = modifier, topBar = { @@ -80,33 +90,57 @@ fun RoomDetailsView( .padding(padding) .verticalScroll(rememberScrollState()) ) { - HeaderSection( - avatarUrl = state.roomAvatarUrl, - roomId = state.roomId, - roomName = state.roomName, - roomAlias = state.roomAlias - ) - - ShareSection(onShareUser = onShareRoom) + when (state.roomType) { + RoomDetailsType.Room -> { + RoomHeaderSection( + avatarUrl = state.roomAvatarUrl, + roomId = state.roomId, + roomName = state.roomName, + roomAlias = state.roomAlias + ) + RoomShareSection(onShareRoom = onShareRoom) + } + is RoomDetailsType.Dm -> { + val member = state.roomType.roomMember + RoomMemberHeaderSection( + avatarUrl = state.roomAvatarUrl ?: member.avatarUrl, + userId = member.userId.value, + userName = state.roomName + ) + RoomMemberShareSection(onShareUser = ::onShareMember) + } + } if (state.roomTopic != null) { TopicSection(roomTopic = state.roomTopic) } - val memberCount = (state.memberCount as? Async.Success)?.state - MembersSection( - memberCount = memberCount, - isLoading = state.memberCount.isLoading(), - openRoomMemberList = openRoomMemberList - ) + if (state.roomType is RoomDetailsType.Room) { + val memberCount = (state.memberCount as? Async.Success)?.state + MembersSection( + memberCount = memberCount, + isLoading = state.memberCount.isLoading(), + openRoomMemberList = openRoomMemberList + ) + } if (state.isEncrypted) { SecuritySection() } - OtherActionsSection(onLeaveRoom = { - state.eventSink(RoomDetailsEvent.LeaveRoom(needsConfirmation = true)) - }) + when (state.roomType) { + RoomDetailsType.Room -> { + OtherActionsSection(onLeaveRoom = { + state.eventSink(RoomDetailsEvent.LeaveRoom(needsConfirmation = true)) + }) + } + is RoomDetailsType.Dm -> { + BlockSection( + isBlocked = state.roomType.roomMember.isIgnored, + onToggleBlock = { /*TODO*/ } + ) + } + } if (state.displayLeaveRoomWarning != null) { ConfirmLeaveRoomDialog( @@ -127,18 +161,18 @@ fun RoomDetailsView( } @Composable -internal fun ShareSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { +internal fun RoomShareSection(onShareRoom: () -> Unit, modifier: Modifier = Modifier) { PreferenceCategory(modifier = modifier) { PreferenceText( title = stringResource(R.string.screen_room_details_share_room_title), icon = Icons.Outlined.Share, - onClick = onShareUser, + onClick = onShareRoom, ) } } @Composable -internal fun HeaderSection( +internal fun RoomHeaderSection( avatarUrl: String?, roomId: String, roomName: String, @@ -152,10 +186,10 @@ internal fun HeaderSection( modifier = Modifier.fillMaxSize() ) } - Spacer(modifier = Modifier.height(30.dp)) + Spacer(modifier = Modifier.height(24.dp)) Text(roomName, style = ElementTextStyles.Bold.title1) if (roomAlias != null) { - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(6.dp)) Text(roomAlias, style = ElementTextStyles.Regular.body, color = MaterialTheme.colorScheme.secondary) } Spacer(Modifier.height(32.dp)) @@ -256,6 +290,7 @@ private fun ContentToPreview(state: RoomDetailsState) { state = state, goBack = {}, onShareRoom = {}, + onShareMember = {}, openRoomMemberList = {}, ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindsModule.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberModules.kt similarity index 78% rename from features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindsModule.kt rename to features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberModules.kt index b2fb9e04ae..68f77b5821 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberBindsModule.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/di/RoomMemberModules.kt @@ -20,12 +20,15 @@ import com.squareup.anvil.annotations.ContributesTo import dagger.Binds import dagger.Module import dagger.Provides +import io.element.android.features.roomdetails.impl.RoomDetailsPresenter import io.element.android.features.roomdetails.impl.members.RoomUserListDataSource import io.element.android.features.roomdetails.impl.members.details.RoomMemberDetailsPresenter import io.element.android.features.userlist.api.UserListDataSource import io.element.android.libraries.di.RoomScope +import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.RoomMember +import io.element.android.libraries.matrix.api.room.RoomMembershipObserver import javax.inject.Named @Module @@ -40,6 +43,16 @@ interface RoomMemberBindsModule { @Module @ContributesTo(RoomScope::class) object RoomMemberProvidesModule { + + @Provides + fun provideRoomDetailsPresenter( + matrixClient: MatrixClient, + room: MatrixRoom, + roomMembershipObserver: RoomMembershipObserver, + ): RoomDetailsPresenter { + return RoomDetailsPresenter(matrixClient.sessionId, room, roomMembershipObserver) + } + @Provides fun provideRoomMemberDetailsPresenterFactory( room: MatrixRoom, diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt index 59f13115f0..fafe0ede99 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListNode.kt @@ -25,7 +25,6 @@ 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.roomdetails.impl.RoomDetailsFlowNode import io.element.android.libraries.di.RoomScope import io.element.android.libraries.matrix.api.room.MatrixRoom import io.element.android.libraries.matrix.api.room.RoomMember @@ -44,12 +43,12 @@ class RoomMemberListNode @AssistedInject constructor( fun openRoomMemberDetails(roomMember: RoomMember) } - private val callback = plugins().first() + private val callbacks = plugins() private fun onUserSelected(matrixUser: MatrixUser) { val member = room.getMember(matrixUser.id) if (member != null) { - callback.openRoomMemberDetails(member) + callbacks.forEach { it.openRoomMemberDetails(member) } } else { Timber.e("Could find room member ${matrixUser.id} in room ${room.roomId}") } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomUserListDataSource.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomUserListDataSource.kt index 9f22c41666..dc0008d2a3 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomUserListDataSource.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomUserListDataSource.kt @@ -34,7 +34,8 @@ class RoomUserListDataSource @Inject constructor( if (query.isBlank()) { true } else { - member.userId.contains(query, ignoreCase = true) || member.displayName?.contains(query, ignoreCase = true).orFalse() + member.userId.value.contains(query, ignoreCase = true) + || member.displayName?.contains(query, ignoreCase = true).orFalse() } }.map(::mapMemberToMatrixUser) } @@ -45,10 +46,10 @@ class RoomUserListDataSource @Inject constructor( private fun mapMemberToMatrixUser(member: RoomMember): MatrixUser { return MatrixUser( - id = UserId(member.userId), + id = member.userId, username = member.displayName, avatarData = AvatarData( - id = member.userId, + id = member.userId.value, name = member.displayName, url = member.avatarUrl ) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt index 2ce6688925..2c74caa8fd 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsEvents.kt @@ -16,7 +16,4 @@ package io.element.android.features.roomdetails.impl.members.details -// TODO Add your events or remove the file completely if no events -sealed interface RoomMemberDetailsEvents { - object MyEvent : RoomMemberDetailsEvents -} +sealed interface RoomMemberDetailsEvents 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 cf1266099a..5cd2544537 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 @@ -56,7 +56,7 @@ class RoomMemberDetailsNode @AssistedInject constructor( val context = LocalContext.current fun onShareUser() { - val permalinkResult = PermalinkBuilder.permalinkForUser(UserId(inputs.member.userId)) + val permalinkResult = PermalinkBuilder.permalinkForUser(inputs.member.userId) permalinkResult.onSuccess { permalink -> startSharePlainTextIntent( context = context, 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 0e997c4499..de24b5ee1b 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 @@ -17,6 +17,8 @@ package io.element.android.features.roomdetails.impl.members.details import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.produceState import dagger.assisted.Assisted import dagger.assisted.AssistedInject import io.element.android.libraries.architecture.Presenter @@ -40,10 +42,22 @@ class RoomMemberDetailsPresenter @AssistedInject constructor( // } // } + val userName by produceState(initialValue = roomMember.displayName) { + room.userDisplayName(roomMember.userId).onSuccess { displayName -> + if (displayName != null) value = displayName + } + } + + val userAvatar by produceState(initialValue = roomMember.avatarUrl) { + room.userAvatarUrl(roomMember.userId).onSuccess { avatarUrl -> + if (avatarUrl != null) value = avatarUrl + } + } + return RoomMemberDetailsState( - userId = roomMember.userId, - userName = roomMember.displayName, - avatarUrl = roomMember.avatarUrl, + userId = roomMember.userId.value, + userName = userName, + avatarUrl = userAvatar, isBlocked = roomMember.isIgnored, // eventSink = ::handleEvents ) diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt index d7a97e5fdc..c8642cf2da 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/details/RoomMemberDetailsView.kt @@ -74,13 +74,13 @@ fun RoomMemberDetailsView( .padding(padding) .verticalScroll(rememberScrollState()) ) { - HeaderSection( + RoomMemberHeaderSection( avatarUrl = state.avatarUrl, userId = state.userId, userName = state.userName, ) - ShareSection(onShareUser = onShareUser) + RoomMemberShareSection(onShareUser = onShareUser) SendMessageSection(onSendMessage = { // TODO implement send DM @@ -94,7 +94,7 @@ fun RoomMemberDetailsView( } @Composable -internal fun HeaderSection( +internal fun RoomMemberHeaderSection( avatarUrl: String?, userId: String, userName: String?, @@ -107,10 +107,10 @@ internal fun HeaderSection( modifier = Modifier.fillMaxSize() ) } - Spacer(modifier = Modifier.height(30.dp)) + Spacer(modifier = Modifier.height(24.dp)) if (userName != null) { Text(userName, style = ElementTextStyles.Bold.title1) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.height(6.dp)) } Text(userId, style = ElementTextStyles.Regular.body, color = MaterialTheme.colorScheme.secondary) Spacer(Modifier.height(32.dp)) @@ -118,7 +118,7 @@ internal fun HeaderSection( } @Composable -internal fun ShareSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { +internal fun RoomMemberShareSection(onShareUser: () -> Unit, modifier: Modifier = Modifier) { PreferenceCategory(modifier = modifier) { PreferenceText( title = stringResource(StringR.string.action_share), 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 0dedd71c06..66e74cd5cc 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 @@ -32,6 +32,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembershipState import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange 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.A_SESSION_ID import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.room.FakeMatrixRoom import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -49,7 +50,7 @@ class RoomDetailsPresenterTests { @Test fun `present - initial state is created from room info`() = runTest { val room = aMatrixRoom() - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -68,7 +69,7 @@ class RoomDetailsPresenterTests { @Test fun `present - room member count is calculated asynchronously`() = runTest { val room = aMatrixRoom() - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -83,7 +84,7 @@ class RoomDetailsPresenterTests { @Test fun `present - initial state with no room name`() = runTest { val room = aMatrixRoom(name = null) - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -99,7 +100,7 @@ class RoomDetailsPresenterTests { val room = aMatrixRoom(name = null).apply { givenFetchMemberResult(Result.failure(Throwable())) } - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -113,7 +114,7 @@ class RoomDetailsPresenterTests { @Test fun `present - Leave with confirmation on private room shows a specific warning`() = runTest { val room = aMatrixRoom(isPublic = false) - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -130,7 +131,7 @@ class RoomDetailsPresenterTests { @Test fun `present - Leave with confirmation on empty room shows a specific warning`() = runTest { val room = aMatrixRoom(members = listOf(aRoomMember())) - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -147,7 +148,7 @@ class RoomDetailsPresenterTests { @Test fun `present - Leave with confirmation shows a generic warning`() = runTest { val room = aMatrixRoom() - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -164,7 +165,7 @@ class RoomDetailsPresenterTests { @Test fun `present - Leave without confirmation leaves the room`() = runTest { val room = aMatrixRoom() - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -188,7 +189,7 @@ class RoomDetailsPresenterTests { val room = aMatrixRoom().apply { givenLeaveRoomError(Throwable()) } - val presenter = RoomDetailsPresenter(room, roomMembershipObserver) + val presenter = RoomDetailsPresenter(A_SESSION_ID, room, roomMembershipObserver) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { @@ -235,7 +236,7 @@ fun aRoomMember( normalizedPowerLevel: Long = 0L, isIgnored: Boolean = false, ) = RoomMember( - userId = userId.value, + userId = userId, displayName = displayName, avatarUrl = avatarUrl, membership = membership, 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 de4904fb7f..68de573fae 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,18 +31,63 @@ import org.junit.Test class RoomMemberDetailsPresenterTests { @Test - fun `present - returns the room member's data`() = runTest { - val room = aMatrixRoom() + fun `present - returns the room member's data, then updates it if needed`() = runTest { + val room = aMatrixRoom().apply { + givenUserDisplayNameResult(Result.success("A custom name")) + givenUserAvatarUrlResult(Result.success("A custom avatar")) + } val roomMember = aRoomMember(displayName = "Alice") val presenter = RoomMemberDetailsPresenter(room, roomMember) moleculeFlow(RecompositionClock.Immediate) { presenter.present() }.test { val initialState = awaitItem() - Truth.assertThat(initialState.userId).isEqualTo(roomMember.userId) + Truth.assertThat(initialState.userId).isEqualTo(roomMember.userId.value) Truth.assertThat(initialState.userName).isEqualTo(roomMember.displayName) Truth.assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) Truth.assertThat(initialState.isBlocked).isEqualTo(roomMember.isIgnored) + + val loadedState = awaitItem() + Truth.assertThat(loadedState.userName).isEqualTo("A custom name") + Truth.assertThat(loadedState.avatarUrl).isEqualTo("A custom avatar") + } + } + + @Test + fun `present - will recover when retrieving room member details fails`() = runTest { + val room = aMatrixRoom().apply { + givenUserDisplayNameResult(Result.failure(Throwable())) + givenUserAvatarUrlResult(Result.failure(Throwable())) + } + val roomMember = aRoomMember(displayName = "Alice") + val presenter = RoomMemberDetailsPresenter(room, roomMember) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + Truth.assertThat(initialState.userName).isEqualTo(roomMember.displayName) + Truth.assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) + + ensureAllEventsConsumed() + } + } + + @Test + fun `present - will fallback to original data if the updated data is null`() = runTest { + val room = aMatrixRoom().apply { + givenUserDisplayNameResult(Result.success(null)) + givenUserAvatarUrlResult(Result.success(null)) + } + val roomMember = aRoomMember(displayName = "Alice") + val presenter = RoomMemberDetailsPresenter(room, roomMember) + moleculeFlow(RecompositionClock.Immediate) { + presenter.present() + }.test { + val initialState = awaitItem() + Truth.assertThat(initialState.userName).isEqualTo(roomMember.displayName) + Truth.assertThat(initialState.avatarUrl).isEqualTo(roomMember.avatarUrl) + + ensureAllEventsConsumed() } } } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkBuilder.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkBuilder.kt index 2d8456be38..6a15bfb514 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkBuilder.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/permalink/PermalinkBuilder.kt @@ -48,7 +48,7 @@ object PermalinkBuilder { } Result.success(url) } else { - Result.failure(PermalinkBuilderError.InvalidRoomAlias) + Result.failure(PermalinkBuilderError.InvalidUserId) } } @@ -87,4 +87,5 @@ object PermalinkBuilder { sealed class PermalinkBuilderError : Throwable() { object InvalidRoomAlias : PermalinkBuilderError() object InvalidRoomId : PermalinkBuilderError() + object InvalidUserId : PermalinkBuilderError() } 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 f9726f5670..d4338bb497 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 @@ -33,6 +33,7 @@ interface MatrixRoom: Closeable { val topic: String? val avatarUrl: String? val isEncrypted: Boolean + val isDirect: Boolean val isPublic: Boolean suspend fun members() : List @@ -41,15 +42,17 @@ interface MatrixRoom: Closeable { fun getMember(userId: UserId): RoomMember? + fun getDmMember(): RoomMember? + fun syncUpdateFlow(): Flow fun timeline(): MatrixTimeline suspend fun fetchMembers(): Result - suspend fun userDisplayName(userId: String): Result + suspend fun userDisplayName(userId: UserId): Result - suspend fun userAvatarUrl(userId: String): Result + suspend fun userAvatarUrl(userId: UserId): Result suspend fun sendMessage(message: String): Result diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt index 9c3e771f22..25bb3e8a7e 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/room/RoomMember.kt @@ -17,11 +17,12 @@ package io.element.android.libraries.matrix.api.room import android.os.Parcelable +import io.element.android.libraries.matrix.api.core.UserId import kotlinx.parcelize.Parcelize @Parcelize data class RoomMember( - val userId: String, + val userId: UserId, val displayName: String?, val avatarUrl: String?, val membership: RoomMembershipState, 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 d54da9e8e2..d90d502145 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 @@ -168,6 +168,7 @@ class RustMatrixClient constructor( val slidingSyncRoom = slidingSync.getRoom(roomId.value) ?: return null val fullRoom = slidingSyncRoom.fullRoom() ?: return null return RustMatrixRoom( + currentUserId = sessionId, slidingSyncUpdateFlow = slidingSyncObserverProxy.updateSummaryFlow, slidingSyncRoom = slidingSyncRoom, innerRoom = fullRoom, diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomMemberMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomMemberMapper.kt index 1fe0de6080..2d2be4f36a 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomMemberMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/room/RoomMemberMapper.kt @@ -16,6 +16,7 @@ package io.element.android.libraries.matrix.impl.room +import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.room.RoomMember import io.element.android.libraries.matrix.api.room.RoomMembershipState import org.matrix.rustcomponents.sdk.MembershipState as RustMembershipState @@ -25,7 +26,7 @@ object RoomMemberMapper { fun map(roomMember: RustRoomMember): RoomMember = RoomMember( - roomMember.userId(), + UserId(roomMember.userId()), roomMember.displayName(), roomMember.avatarUrl(), mapMembership(roomMember.membership()), 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 8498aa1376..cc0eac2e1f 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 @@ -40,6 +40,7 @@ import org.matrix.rustcomponents.sdk.genTransactionId import org.matrix.rustcomponents.sdk.messageEventContentFromMarkdown class RustMatrixRoom( + private val currentUserId: UserId, private val slidingSyncUpdateFlow: Flow, private val slidingSyncRoom: SlidingSyncRoom, private val innerRoom: Room, @@ -70,7 +71,15 @@ class RustMatrixRoom( } override fun getMember(userId: UserId): RoomMember? { - return cachedMembers.firstOrNull { it.userId == userId.value } + return cachedMembers.find { it.userId == userId } + } + + override fun getDmMember(): RoomMember? { + return if (cachedMembers.size == 2 && isDirect && isEncrypted) { + cachedMembers.find { it.userId != currentUserId } + } else { + null + } } override fun syncUpdateFlow(): Flow { @@ -127,7 +136,7 @@ class RustMatrixRoom( } override val isEncrypted: Boolean - get() = innerRoom.isEncrypted() + get() = runCatching { innerRoom.isEncrypted() }.getOrDefault(false) override val alias: String? get() = innerRoom.canonicalAlias() @@ -138,23 +147,26 @@ class RustMatrixRoom( override val isPublic: Boolean get() = innerRoom.isPublic() + override val isDirect: Boolean + get() = innerRoom.isDirect() + override suspend fun fetchMembers(): Result = withContext(coroutineDispatchers.io) { runCatching { innerRoom.fetchMembers() } } - override suspend fun userDisplayName(userId: String): Result = + override suspend fun userDisplayName(userId: UserId): Result = withContext(coroutineDispatchers.io) { runCatching { - innerRoom.memberDisplayName(userId) + innerRoom.memberDisplayName(userId.value) } } - override suspend fun userAvatarUrl(userId: String): Result = + override suspend fun userAvatarUrl(userId: UserId): Result = withContext(coroutineDispatchers.io) { runCatching { - innerRoom.memberAvatarUrl(userId) + innerRoom.memberAvatarUrl(userId.value) } } 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 97f06bcabf..902f41a80c 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 @@ -39,10 +39,14 @@ class FakeMatrixRoom( override val alias: String? = null, override val alternativeAliases: List = emptyList(), override val isPublic: Boolean = true, + override val isDirect: Boolean = false, private val members: List = emptyList(), private val matrixTimeline: MatrixTimeline = FakeMatrixTimeline(), ) : MatrixRoom { + private var userDisplayNameResult = Result.success(null) + private var userAvatarUrlResult = Result.success(null) + private var dmMember: RoomMember? = null private var fetchMemberResult: Result = Result.success(Unit) var areMembersFetched: Boolean = false @@ -66,12 +70,16 @@ class FakeMatrixRoom( } } - override suspend fun userDisplayName(userId: String): Result { - return Result.success("") + override fun getDmMember(): RoomMember? { + return dmMember } - override suspend fun userAvatarUrl(userId: String): Result { - TODO("Not yet implemented") + override suspend fun userDisplayName(userId: UserId): Result { + return userDisplayNameResult + } + + override suspend fun userAvatarUrl(userId: UserId): Result { + return userAvatarUrlResult } override suspend fun members(): List { @@ -87,7 +95,7 @@ class FakeMatrixRoom( } override fun getMember(userId: UserId): RoomMember? { - return members.firstOrNull { it.userId == userId.value } + return members.firstOrNull { it.userId == userId } } override suspend fun sendMessage(message: String): Result { @@ -133,4 +141,16 @@ class FakeMatrixRoom( fun givenFetchMemberResult(result: Result) { fetchMemberResult = result } + + fun givenDmMember(roomMember: RoomMember) { + this.dmMember = roomMember + } + + fun givenUserDisplayNameResult(displayName: Result) { + userDisplayNameResult = displayName + } + + fun givenUserAvatarUrlResult(avatarUrl: Result) { + userAvatarUrlResult = avatarUrl + } } diff --git a/libraries/ui-strings/src/main/res/values/localazy.xml b/libraries/ui-strings/src/main/res/values/localazy.xml index 379dd5508f..72c7dfe08f 100644 --- a/libraries/ui-strings/src/main/res/values/localazy.xml +++ b/libraries/ui-strings/src/main/res/values/localazy.xml @@ -121,15 +121,60 @@ "Are you sure that you want to leave this room? This room is not public and you will not be able to rejoin without an invite." "Are you sure that you want to leave the room?" "%1$s Android" + "Call" + "Listening for events" + "Noisy notifications" + "Silent notifications" + "** Failed to send - please open room" + "Join" + "Reject" + "New Messages" + "Mark as read" + "Quick reply" + "Me" + "You are viewing the notification! Click me!" + "%1$s: %2$s" + "%1$s: %2$s %3$s" + "%1$s and %2$s" + "%1$s in %2$s" + "%1$s in %2$s and %3$s" "%1$d member" "%1$d members" + + "%1$s: %2$d message" + "%1$s: %2$d messages" + + + "%d notification" + "%d notifications" + + + "%d invitation" + "%d invitations" + + + "%d new message" + "%d new messages" + + + "%d unread notified message" + "%d unread notified messages" + + + "%d room" + "%d rooms" + "%1$d room change" "%1$d room changes" "Rageshake to report bug" + "Choose how to receive notifications" + "Background synchronization" + "Google Services" + "No valid Google Play Services found. Notifications may not work properly." "You seem to be shaking the phone in frustration. Would you like to open the bug report screen?" "This message will be reported to your homeserver’s administrator. They will not be able to read any encrypted messages." "Reason for reporting this content" diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png index 9af1f155a8..de77e469f6 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6b4eaf1009581383dc6b95f1e27c3f4f94f63ef9e6b1875521ba5249f449ce9 -size 28705 +oid sha256:d8c78efed997712873719636ff1f8479d38d317e443c5d4340346d4328de9c0d +size 28744 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png index 75a3ccc4ee..a838379617 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32b9585ac785804c27eba9a630d5634c79b08b276a11607ea80c83eacccb59a0 -size 26252 +oid sha256:f237e773fa1a627776786a1484eae790cf1b7401ef45aa8025471dc5e980f99f +size 26223 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_2,NEXUS_5,1.0,en].png index 479406f955..a686c36e68 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewDarkPreview_0_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:312a9c09176df3772386c5bb6f1d6945ae2638101e790a991e6becaec2440b8a -size 29618 +oid sha256:e52089ad9c1703034e8f4550479322c8d08a2353bdf8472c69091ed4c3ed32b6 +size 29677 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_0,NEXUS_5,1.0,en].png index ea22da115e..f269338d7c 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf5bef51ccb02f801be411b46859f86d5ff0a571978763b589135eb12f1ec60e -size 28265 +oid sha256:2f62537b4aa79f501908d1fff9d269139e88db5f6dbaedcf63670a4f71b47bff +size 28303 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_1,NEXUS_5,1.0,en].png index a11a39bb0e..3e461cea52 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:625cad77761037dbf600a1ce7635257051d66138ffbde2663f94550a96d3007c -size 25872 +oid sha256:bb5cf00996e3c43f6c3a20f37c8e83fd4445ffe7e03f8cded23edf89f7f01856 +size 25716 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_2,NEXUS_5,1.0,en].png index b982a61f9c..25c23cd924 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl.members.details_null_DefaultGroup_RoomMemberDetailsViewLightPreview_0_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c210546e81ac92d6a3f2583dd3443e0314f2259aa455d1ecdf6da77048fd861 -size 28733 +oid sha256:6754266a962dc5692cc89201c0feef7dfabc68fad000ccdf1196b7b0274c4917 +size 28771 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_0,NEXUS_5,1.0,en].png index e10bcdc525..73e45928ea 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e1e4858da2e25786e5ef953d0456271ca7dcecc27edb1bf1bd2c46575d3c241 -size 70626 +oid sha256:98b3a3f4f688e338ef551a62a7ff274be52df49f2073c2db61abe3ce204bd1b4 +size 73278 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_1,NEXUS_5,1.0,en].png index e7b43b6259..4b2ccef14e 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f5cce767021a2b93d7c98f05d566a9107c72805a446504b5da2e15a9298e586 -size 55944 +oid sha256:9be790757cab81d0486c09ef13e356778b909b4c4779db096e99720133568dc4 +size 55722 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_2,NEXUS_5,1.0,en].png index 6ed5f72ddc..531a1de7f3 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4a97b7be4416c384ac4f8f9adde64f82dfc0fd0dcd137cd763508215785ea27 -size 56122 +oid sha256:13530e652603ff4a7f8a9ea7675dfef777aa7a24649066e2f3c8813dd75a5b9a +size 55680 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_3,NEXUS_5,1.0,en].png index 4dcea7f871..bf6bea4eec 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12919612683b962d9a835b4442a29247c64c17c152ac617319eb5d14d80631b9 -size 70453 +oid sha256:c067ef1c3905a0111dea3ebede4c990b2c3952b48284229fa6c0bd98e0767890 +size 69571 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_4,NEXUS_5,1.0,en].png index a3331e0b02..1a81e3f9fa 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fe9b98fbdd3fd9c7789463f14345f6f65f9a18eedf2229d14c62a3bee6711e3 -size 70058 +oid sha256:e79967506d4722d756d65e9db042671c8af3dda186a8db6c1b470c891435f86a +size 72759 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..e9e352cb20 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:354452861d1e006a8bfa744251ffdaf15088e0bb181a53043f121e606233d648 +size 67340 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..8dd1cd9116 --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsDarkPreview_0_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1cb6bac9e72b956d0cffde807340e36a7a4d6873d4d7337995b53e82769c4f9 +size 68135 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_0,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_0,NEXUS_5,1.0,en].png index eec2e03e89..9ad025638e 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_0,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_0,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20c39d6c718e3831a454e06a854addf65537a4fc15d2e09adb6b00e87491e014 -size 65179 +oid sha256:0dd97b2c66da4f2a539a13d185a3116754dedc1617b0fffcb01d71c81b071fe3 +size 67084 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_1,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_1,NEXUS_5,1.0,en].png index 3808244b53..5be6e198ff 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_1,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_1,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bc9b7dde35c828d0158de1b8cc872416a1b4778a352b0c64cdf93c3bbc41c86 -size 52891 +oid sha256:a8ecd0f0f1d27e63d772f7e4b976d613b887887dd765b92599ddb66898d6fb4e +size 52730 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_2,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_2,NEXUS_5,1.0,en].png index 740e7dd3c5..5dbe88965b 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_2,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_2,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68b646c429285f1827c7646fb170c0ac1a3e995872292bc2ddcf298fb565bcbe -size 52388 +oid sha256:ef9243323fdcddd884a634d2c611987527ec1c8a2e8c7fac89adec5a4d2c2791 +size 51814 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_3,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_3,NEXUS_5,1.0,en].png index 032bbecb26..26a837fcae 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_3,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_3,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c05c36d07d5b3b95d66233cd45053419a460e38ae940b86f125a42b57307985 -size 64443 +oid sha256:4993533f1ca5bd0ac4c6afddd672fd3a54085b0dd84dceb78b5c8766603e5755 +size 64003 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_4,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_4,NEXUS_5,1.0,en].png index 2c0511cb21..f5aaa3afec 100644 --- a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_4,NEXUS_5,1.0,en].png +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_4,NEXUS_5,1.0,en].png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48f138bc8a63ac25152491c974c68d6e024ded04b973f174fb5b9586523217ca -size 64593 +oid sha256:10bb54d9ec1d433c1b45091c73d9415b6843d7d39dfcba044ca5f8057d0002d6 +size 66485 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_5,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_5,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..815e64ba9f --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_5,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc56e29c26250c6fef312ec4c5fdfaa2f63159fd0565bd37522b46c7ff67906a +size 61924 diff --git a/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_6,NEXUS_5,1.0,en].png b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_6,NEXUS_5,1.0,en].png new file mode 100644 index 0000000000..687b034bee --- /dev/null +++ b/tests/uitests/src/test/snapshots/images/io.element.android.tests.uitests_ScreenshotTest_preview_tests[io.element.android.features.roomdetails.impl_null_DefaultGroup_RoomDetailsLightPreview_0_null_6,NEXUS_5,1.0,en].png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6faff25a1c187dee59d0dcf0affd5029251512efb6eff7fc2d41d34bace2061 +size 62356