diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/AllMatrixUsersDataSource.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/AllMatrixUsersDataSource.kt index 4ca985134e..e021d17144 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/AllMatrixUsersDataSource.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/AllMatrixUsersDataSource.kt @@ -17,11 +17,9 @@ package io.element.android.features.createroom.impl import io.element.android.features.userlist.api.UserListDataSource -import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.api.usersearch.MatrixUserProfile -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import javax.inject.Inject class AllMatrixUsersDataSource @Inject constructor( @@ -29,7 +27,7 @@ class AllMatrixUsersDataSource @Inject constructor( ) : UserListDataSource { override suspend fun search(query: String): List { val res = client.searchUsers(query, MAX_SEARCH_RESULTS) - return res.getOrNull()?.results?.map(::toMatrixUser).orEmpty() + return res.getOrNull()?.results.orEmpty() } override suspend fun getProfile(userId: UserId): MatrixUser? { @@ -37,16 +35,6 @@ class AllMatrixUsersDataSource @Inject constructor( return null } - private fun toMatrixUser(matrixUserProfile: MatrixUserProfile) = MatrixUser( - id = matrixUserProfile.userId, - username = matrixUserProfile.displayName, - avatarData = AvatarData( - id = matrixUserProfile.userId.value, - name = matrixUserProfile.displayName, - url = matrixUserProfile.avatarUrl, - ) - ) - companion object { private const val MAX_SEARCH_RESULTS = 5L } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt index 0aedf12d0f..21662fdb64 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/CreateRoomConfig.kt @@ -17,7 +17,7 @@ package io.element.android.features.createroom.impl import io.element.android.features.createroom.impl.configureroom.RoomPrivacy -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt index c444e83c16..f2c454656c 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomEvents.kt @@ -18,7 +18,7 @@ package io.element.android.features.createroom.impl.configureroom import android.net.Uri import io.element.android.features.createroom.impl.CreateRoomConfig -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser sealed interface ConfigureRoomEvents { data class RoomNameChanged(val name: String) : ConfigureRoomEvents diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt index 99d093a4ee..fa61c7f643 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt @@ -89,7 +89,7 @@ class ConfigureRoomPresenter @Inject constructor( isDirect = false, visibility = if (config.privacy == RoomPrivacy.Public) RoomVisibility.PUBLIC else RoomVisibility.PRIVATE, preset = if (config.privacy == RoomPrivacy.Public) RoomPreset.PUBLIC_CHAT else RoomPreset.PRIVATE_CHAT, - invite = config.invites.map { it.id }, + invite = config.invites.map { it.userId }, avatar = config.avatarUrl, ) matrixClient.createRoom(params).getOrThrow() diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterArgs.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterArgs.kt index 8969a2a5fa..5e52668a3d 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterArgs.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterArgs.kt @@ -16,7 +16,7 @@ package io.element.android.features.createroom.impl.configureroom -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser data class ConfigureRoomPresenterArgs( val selectedUsers: List, diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt index 87f35e4b1b..33691009ed 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootEvents.kt @@ -16,7 +16,7 @@ package io.element.android.features.createroom.impl.root -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser sealed interface CreateRoomRootEvents { object InvitePeople : CreateRoomRootEvents diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt index 363dc23363..c7f3a11e5f 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt @@ -31,7 +31,7 @@ import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.execute import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import javax.inject.Inject @@ -65,7 +65,7 @@ class CreateRoomRootPresenter @Inject constructor( fun startDm(matrixUser: MatrixUser) { startDmAction.value = Async.Uninitialized - val existingDM = matrixClient.findDM(matrixUser.id) + val existingDM = matrixClient.findDM(matrixUser.userId) if (existingDM == null) { localCoroutineScope.createDM(matrixUser, startDmAction) } else { @@ -90,7 +90,7 @@ class CreateRoomRootPresenter @Inject constructor( private fun CoroutineScope.createDM(user: MatrixUser, startDmAction: MutableState>) = launch { suspend { - matrixClient.createDM(user.id).getOrThrow() + matrixClient.createDM(user.userId).getOrThrow() }.execute(startDmAction) } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt index 1836495ecf..ccfad47a86 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt @@ -31,7 +31,7 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider) = launch { val userAvatarUrl = client.loadUserAvatarURLString().getOrNull() val userDisplayName = client.loadUserDisplayName().getOrNull() - val avatarData = - AvatarData( - id = client.sessionId.value, - name = userDisplayName, - url = userAvatarUrl, - size = AvatarSize.SMALL - ) matrixUser.value = MatrixUser( - id = UserId(client.sessionId.value), - username = userDisplayName ?: client.sessionId.value, - avatarData = avatarData, + userId = UserId(client.sessionId.value), + displayName = userDisplayName, + avatarUrl = userAvatarUrl, ) } 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 6fd629d67f..0afc88a8e2 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 @@ -19,7 +19,7 @@ package io.element.android.features.roomlist.impl import androidx.compose.runtime.Immutable import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.libraries.designsystem.utils.SnackbarMessage -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList @Immutable 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 a95456b6a4..154dd37a9c 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,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.utils.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.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf import io.element.android.libraries.ui.strings.R as StringR @@ -42,7 +42,7 @@ open class RoomListStateProvider : PreviewParameterProvider { } internal fun aRoomListState() = RoomListState( - matrixUser = MatrixUser(id = UserId("@id:domain"), username = "User#1", avatarData = AvatarData("@id:domain", "U")), + matrixUser = MatrixUser(userId = UserId("@id:domain"), displayName = "User#1"), roomList = aRoomListRoomSummaryList(), filter = "filter", filteredRoomList = aRoomListRoomSummaryList(), diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt index 11f0616e07..32bf30b082 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomListTopBar.kt @@ -27,6 +27,9 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource @@ -35,7 +38,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import io.element.android.features.roomlist.impl.R import io.element.android.libraries.designsystem.components.avatar.Avatar -import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Icon @@ -44,7 +46,8 @@ import io.element.android.libraries.designsystem.theme.components.MediumTopAppBa import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.utils.LogCompositions import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser +import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.testtags.TestTags import io.element.android.libraries.testtags.testTag import io.element.android.libraries.ui.strings.R as StringR @@ -107,7 +110,8 @@ private fun DefaultRoomListTopBar( modifier = Modifier.testTag(TestTags.homeScreenSettings), onClick = onOpenSettings ) { - Avatar(matrixUser.avatarData, contentDescription = stringResource(StringR.string.common_settings)) + val avatarData by remember { derivedStateOf { matrixUser.getAvatarData() } } + Avatar(avatarData, contentDescription = stringResource(StringR.string.common_settings)) } } }, @@ -135,7 +139,7 @@ internal fun DefaultRoomListTopBarDarkPreview() = ElementPreviewDark { DefaultRo @Composable private fun DefaultRoomListTopBarPreview() { DefaultRoomListTopBar( - matrixUser = MatrixUser(UserId("@id:domain"), "Alice", AvatarData("@id:domain", "Alice")), + matrixUser = MatrixUser(UserId("@id:domain"), "Alice"), scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState()), ) } 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 5dd73980f8..7f7743aae9 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 @@ -60,10 +60,9 @@ class RoomListPresenterTests { Truth.assertThat(initialState.matrixUser).isNull() val withUserState = awaitItem() Truth.assertThat(withUserState.matrixUser).isNotNull() - Truth.assertThat(withUserState.matrixUser!!.id).isEqualTo(A_USER_ID) - Truth.assertThat(withUserState.matrixUser!!.username).isEqualTo(A_USER_NAME) - Truth.assertThat(withUserState.matrixUser!!.avatarData.name).isEqualTo(A_USER_NAME) - Truth.assertThat(withUserState.matrixUser!!.avatarData.url).isEqualTo(AN_AVATAR_URL) + Truth.assertThat(withUserState.matrixUser!!.userId).isEqualTo(A_USER_ID) + Truth.assertThat(withUserState.matrixUser!!.displayName).isEqualTo(A_USER_NAME) + Truth.assertThat(withUserState.matrixUser!!.avatarUrl).isEqualTo(AN_AVATAR_URL) } } @@ -88,8 +87,6 @@ class RoomListPresenterTests { Truth.assertThat(initialState.matrixUser).isNull() val withUserState = awaitItem() Truth.assertThat(withUserState.matrixUser).isNotNull() - // username fallback to user id value - Truth.assertThat(withUserState.matrixUser!!.username).isEqualTo(A_USER_ID.value) } } diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataSource.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataSource.kt index 2cfd23eb61..0f579b48b7 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataSource.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataSource.kt @@ -17,7 +17,7 @@ package io.element.android.features.userlist.api import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser interface UserListDataSource { //TODO should probably have a flow diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataStore.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataStore.kt index f9c73950f1..31750e5350 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataStore.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListDataStore.kt @@ -16,7 +16,7 @@ package io.element.android.features.userlist.api -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import javax.inject.Inject diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListEvents.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListEvents.kt index f648a14d74..fe0d681fe1 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListEvents.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListEvents.kt @@ -16,7 +16,7 @@ package io.element.android.features.userlist.api -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser sealed interface UserListEvents { data class UpdateSearchQuery(val query: String) : UserListEvents diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListState.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListState.kt index 4904a6ceab..490a1fdde3 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListState.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/UserListState.kt @@ -16,7 +16,7 @@ package io.element.android.features.userlist.api -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList data class UserListState( diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchMultipleUsersResultItem.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchMultipleUsersResultItem.kt index 7267af1f9b..f153d3671a 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchMultipleUsersResultItem.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchMultipleUsersResultItem.kt @@ -24,9 +24,9 @@ import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.CheckableMatrixUserRow import io.element.android.libraries.matrix.ui.components.aMatrixUser -import io.element.android.libraries.matrix.ui.model.MatrixUser @Composable fun SearchMultipleUsersResultItem( diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchSingleUserResultItem.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchSingleUserResultItem.kt index 67af583473..5f42438868 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchSingleUserResultItem.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchSingleUserResultItem.kt @@ -24,9 +24,9 @@ import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.MatrixUserRow import io.element.android.libraries.matrix.ui.components.aMatrixUser -import io.element.android.libraries.matrix.ui.model.MatrixUser @Composable fun SearchSingleUserResultItem( diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchUserBar.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchUserBar.kt index c5f6afd2e5..1e82936c92 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchUserBar.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SearchUserBar.kt @@ -43,7 +43,7 @@ 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.SearchBar import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.ui.strings.R import kotlinx.collections.immutable.ImmutableList @@ -128,7 +128,7 @@ fun SearchUserBar( SearchMultipleUsersResultItem( modifier = Modifier.fillMaxWidth(), matrixUser = matrixUser, - isUserSelected = selectedUsers.find { it.id == matrixUser.id } != null, + isUserSelected = selectedUsers.find { it.userId == matrixUser.userId } != null, onCheckedChange = { checked -> if (checked) { onUserSelected(matrixUser) diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUser.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUser.kt index 666a0c5265..d43281bbb1 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUser.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUser.kt @@ -40,8 +40,9 @@ import io.element.android.libraries.designsystem.preview.ElementPreviewLight 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.Text +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUser -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getBestName import io.element.android.libraries.ui.strings.R @@ -55,7 +56,7 @@ fun SelectedUser( Column( horizontalAlignment = Alignment.CenterHorizontally, ) { - Avatar(matrixUser.avatarData.copy(size = AvatarSize.Custom(56.dp))) + Avatar(matrixUser.getAvatarData(size = AvatarSize.Custom(56.dp))) Text( text = matrixUser.getBestName(), overflow = TextOverflow.Ellipsis, diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUsersList.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUsersList.kt index 6909345a51..c9279a3389 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUsersList.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/SelectedUsersList.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp import io.element.android.features.userlist.api.aListOfSelectedUsers import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.ImmutableList @Composable diff --git a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/UserListView.kt b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/UserListView.kt index 7bfca1c216..afff072d9f 100644 --- a/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/UserListView.kt +++ b/features/userlist/api/src/main/kotlin/io/element/android/features/userlist/api/components/UserListView.kt @@ -29,7 +29,7 @@ import io.element.android.features.userlist.api.UserListState import io.element.android.features.userlist.api.UserListStateProvider import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser @Composable fun UserListView( diff --git a/features/userlist/impl/src/main/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenter.kt b/features/userlist/impl/src/main/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenter.kt index 8b1f08b763..24ee9d4e26 100644 --- a/features/userlist/impl/src/main/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenter.kt +++ b/features/userlist/impl/src/main/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenter.kt @@ -38,7 +38,7 @@ import io.element.android.features.userlist.api.UserSearchResultState import io.element.android.libraries.di.SessionScope import io.element.android.libraries.matrix.api.core.MatrixPatterns import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay @@ -105,7 +105,7 @@ class DefaultUserListPresenter @AssistedInject constructor( private suspend fun performSearch(query: String): UserSearchResultState { val isMatrixId = MatrixPatterns.isUserId(query) val results = userListDataSource.search(query).toMutableList() - if (isMatrixId && results.none { it.id.value == query }) { + if (isMatrixId && results.none { it.userId.value == query }) { val getProfileResult: MatrixUser? = userListDataSource.getProfile(UserId(query)) val profile = getProfileResult ?: MatrixUser(UserId(query)) results.add(0, profile) diff --git a/features/userlist/impl/src/test/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenterTests.kt b/features/userlist/impl/src/test/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenterTests.kt index 39ceeba35c..cf9d9da642 100644 --- a/features/userlist/impl/src/test/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenterTests.kt +++ b/features/userlist/impl/src/test/kotlin/io/element/android/features/userlist/impl/DefaultUserListPresenterTests.kt @@ -28,8 +28,8 @@ import io.element.android.features.userlist.api.UserListPresenterArgs import io.element.android.features.userlist.api.UserSearchResultState import io.element.android.features.userlist.test.FakeUserListDataSource import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.ui.components.aMatrixUser -import io.element.android.libraries.matrix.ui.model.MatrixUser import io.mockk.coJustRun import io.mockk.mockkConstructor import kotlinx.collections.immutable.persistentListOf diff --git a/features/userlist/test/src/main/kotlin/io/element/android/features/userlist/test/FakeUserListDataSource.kt b/features/userlist/test/src/main/kotlin/io/element/android/features/userlist/test/FakeUserListDataSource.kt index ba0ccd2c89..1f656e388f 100644 --- a/features/userlist/test/src/main/kotlin/io/element/android/features/userlist/test/FakeUserListDataSource.kt +++ b/features/userlist/test/src/main/kotlin/io/element/android/features/userlist/test/FakeUserListDataSource.kt @@ -18,7 +18,7 @@ package io.element.android.features.userlist.test import io.element.android.features.userlist.api.UserListDataSource import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser class FakeUserListDataSource : UserListDataSource { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt index 2d1e0558f4..7bf4a51ce4 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarData.kt @@ -16,22 +16,16 @@ package io.element.android.libraries.designsystem.components.avatar -import android.os.Parcelable import androidx.compose.runtime.Immutable -import kotlinx.parcelize.IgnoredOnParcel -import kotlinx.parcelize.Parcelize @Immutable -@Parcelize data class AvatarData( val id: String, val name: String?, val url: String? = null, - @IgnoredOnParcel val size: AvatarSize = AvatarSize.MEDIUM -) : Parcelable { +) { - @IgnoredOnParcel val initial by lazy { (name?.takeIf { it.isNotBlank() } ?: id) .let { dn -> 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 c9adb6e50e..92da3ad557 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 @@ -26,7 +26,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.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource -import io.element.android.libraries.matrix.api.usersearch.MatrixSearchUserResults +import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults import io.element.android.libraries.matrix.api.verification.SessionVerificationService import java.io.Closeable 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 3c9bd030b0..7c977f7569 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,6 +17,7 @@ package io.element.android.libraries.matrix.api.room import io.element.android.libraries.matrix.api.core.UserId +import io.element.android.libraries.matrix.api.user.MatrixUser data class RoomMember( val userId: UserId, @@ -29,6 +30,12 @@ data class RoomMember( val isIgnored: Boolean, ) +fun RoomMember.toMatrixUser() = MatrixUser( + userId = userId, + displayName = displayName, + avatarUrl = avatarUrl, +) + enum class RoomMembershipState { BAN, INVITE, JOIN, KNOCK, LEAVE } diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/usersearch/MatrixSearchUserResults.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/MatrixSearchUserResults.kt similarity index 86% rename from libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/usersearch/MatrixSearchUserResults.kt rename to libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/MatrixSearchUserResults.kt index a37e28c197..a63a31b51f 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/usersearch/MatrixSearchUserResults.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/MatrixSearchUserResults.kt @@ -14,9 +14,9 @@ * limitations under the License. */ -package io.element.android.libraries.matrix.api.usersearch +package io.element.android.libraries.matrix.api.user data class MatrixSearchUserResults( - val results: List, + val results: List, val limited: Boolean, ) diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/usersearch/MatrixUserProfile.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/MatrixUser.kt similarity index 74% rename from libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/usersearch/MatrixUserProfile.kt rename to libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/MatrixUser.kt index e9c7330f9b..9880557e33 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/usersearch/MatrixUserProfile.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/user/MatrixUser.kt @@ -14,12 +14,15 @@ * limitations under the License. */ -package io.element.android.libraries.matrix.api.usersearch +package io.element.android.libraries.matrix.api.user +import android.os.Parcelable import io.element.android.libraries.matrix.api.core.UserId +import kotlinx.parcelize.Parcelize -data class MatrixUserProfile( +@Parcelize +data class MatrixUser( val userId: UserId, - val displayName: String?, - val avatarUrl: String? -) + val displayName: String? = null, + val avatarUrl: String? = null +) : Parcelable 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 6e5b46d447..3e90b55d93 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 @@ -29,7 +29,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.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource -import io.element.android.libraries.matrix.api.usersearch.MatrixSearchUserResults +import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.impl.media.RustMediaResolver import io.element.android.libraries.matrix.impl.notification.RustNotificationService diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt index 598e4cb889..c4e18e64fc 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/usersearch/UserSearchResultMapper.kt @@ -17,8 +17,8 @@ package io.element.android.libraries.matrix.impl.usersearch import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.api.usersearch.MatrixSearchUserResults -import io.element.android.libraries.matrix.api.usersearch.MatrixUserProfile +import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults +import io.element.android.libraries.matrix.api.user.MatrixUser import org.matrix.rustcomponents.sdk.SearchUsersResults import org.matrix.rustcomponents.sdk.UserProfile @@ -31,8 +31,8 @@ object UserSearchResultMapper { ) } - private fun mapUserProfile(userProfile: UserProfile): MatrixUserProfile { - return MatrixUserProfile( + private fun mapUserProfile(userProfile: UserProfile): MatrixUser { + return MatrixUser( userId = UserId(userProfile.userId), displayName = userProfile.displayName, avatarUrl = userProfile.avatarUrl, 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 ca41b9d828..207ddc252c 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 @@ -27,7 +27,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.RoomMembershipObserver import io.element.android.libraries.matrix.api.room.RoomSummaryDataSource -import io.element.android.libraries.matrix.api.usersearch.MatrixSearchUserResults +import io.element.android.libraries.matrix.api.user.MatrixSearchUserResults import io.element.android.libraries.matrix.api.verification.SessionVerificationService import io.element.android.libraries.matrix.test.media.FakeMediaResolver import io.element.android.libraries.matrix.test.notification.FakeNotificationService diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/MatrixItemHelper.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/MatrixItemHelper.kt deleted file mode 100644 index 6a2d1b2a3c..0000000000 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/MatrixItemHelper.kt +++ /dev/null @@ -1,53 +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.libraries.matrix.ui - -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.ui.model.MatrixUser -import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.asFlow -import javax.inject.Inject - -class MatrixItemHelper @Inject constructor( - private val client: MatrixClient -) { - /** - * TODO Make username and avatar live... - */ - @OptIn(FlowPreview::class) - fun getCurrentUserData(avatarSize: AvatarSize): Flow { - return suspend { - val userAvatarUrl = client.loadUserAvatarURLString().getOrNull() - val userDisplayName = client.loadUserDisplayName().getOrNull() - val avatarData = - AvatarData( - client.sessionId.value, - userDisplayName, - userAvatarUrl, - avatarSize - ) - MatrixUser( - id = client.sessionId, - username = userDisplayName, - avatarData = avatarData, - ) - }.asFlow() - } -} diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt index e61f02ebf6..14ed5ef134 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/CheckableMatrixUserRow.kt @@ -30,14 +30,14 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Checkbox -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser @Composable fun CheckableMatrixUserRow( checked: Boolean, matrixUser: MatrixUser, modifier: Modifier = Modifier, - avatarSize: AvatarSize = matrixUser.avatarData.size, + avatarSize: AvatarSize = AvatarSize.MEDIUM, onCheckedChange: (Boolean) -> Unit = {}, enabled: Boolean = true, ) { diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt index 18b767bce7..1bfa226725 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserHeader.kt @@ -38,7 +38,8 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser +import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getBestName @Composable @@ -56,7 +57,7 @@ fun MatrixUserHeader( horizontalAlignment = Alignment.CenterHorizontally ) { Avatar( - matrixUser.avatarData.copy(size = AvatarSize.HUGE), + matrixUser.getAvatarData(size = AvatarSize.HUGE), ) Spacer(modifier = Modifier.height(16.dp)) // Name @@ -69,10 +70,10 @@ fun MatrixUserHeader( color = MaterialTheme.colorScheme.primary, ) // Id - if (matrixUser.username.isNullOrEmpty().not()) { + if (matrixUser.displayName.isNullOrEmpty().not()) { Spacer(modifier = Modifier.height(4.dp)) Text( - text = matrixUser.id.value, + text = matrixUser.userId.value, color = MaterialTheme.colorScheme.secondary, fontSize = 14.sp, maxLines = 1, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt index e79e78802a..923afd94ad 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserProvider.kt @@ -17,25 +17,20 @@ package io.element.android.libraries.matrix.ui.components import androidx.compose.ui.tooling.preview.PreviewParameterProvider -import io.element.android.libraries.designsystem.components.avatar.anAvatarData import io.element.android.libraries.matrix.api.core.UserId -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser open class MatrixUserProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( aMatrixUser(), - aMatrixUser().copy( - username = null, - avatarData = anAvatarData().copy(name = null) - ), + aMatrixUser().copy(displayName = null), ) } -fun aMatrixUser(id: String = "@id_of_alice:server.org", userName: String = "Alice") = MatrixUser( - id = UserId(id), - username = userName, - avatarData = anAvatarData(id, userName) +fun aMatrixUser(id: String = "@id_of_alice:server.org", displayName: String = "Alice") = MatrixUser( + userId = UserId(id), + displayName = displayName, ) fun aMatrixUserList() = listOf( @@ -55,10 +50,7 @@ open class MatrixUserWithNullProvider : PreviewParameterProvider { override val values: Sequence get() = sequenceOf( aMatrixUser(), - aMatrixUser().copy( - username = null, - avatarData = anAvatarData().copy(name = null) - ), + aMatrixUser().copy(displayName = null), null, ) } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt index e4d2386c1c..721682f3a3 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/MatrixUserRow.kt @@ -37,14 +37,15 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementPreviewDark import io.element.android.libraries.designsystem.preview.ElementPreviewLight import io.element.android.libraries.designsystem.theme.components.Text -import io.element.android.libraries.matrix.ui.model.MatrixUser +import io.element.android.libraries.matrix.api.user.MatrixUser +import io.element.android.libraries.matrix.ui.model.getAvatarData import io.element.android.libraries.matrix.ui.model.getBestName @Composable fun MatrixUserRow( matrixUser: MatrixUser, modifier: Modifier = Modifier, - avatarSize: AvatarSize = matrixUser.avatarData.size, + avatarSize: AvatarSize = AvatarSize.MEDIUM, ) { Row( modifier = modifier @@ -54,7 +55,7 @@ fun MatrixUserRow( verticalAlignment = Alignment.CenterVertically ) { Avatar( - matrixUser.avatarData.copy(size = avatarSize), + matrixUser.getAvatarData(size = avatarSize), ) Column( modifier = Modifier @@ -70,9 +71,9 @@ fun MatrixUserRow( color = MaterialTheme.colorScheme.primary, ) // Id - if (matrixUser.username.isNullOrEmpty().not()) { + if (matrixUser.displayName.isNullOrEmpty().not()) { Text( - text = matrixUser.id.value, + text = matrixUser.userId.value, color = MaterialTheme.colorScheme.secondary, fontSize = 14.sp, maxLines = 1, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt similarity index 65% rename from libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUser.kt rename to libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt index f0ddb30a93..4d834349a1 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt @@ -16,20 +16,17 @@ package io.element.android.libraries.matrix.ui.model -import android.os.Parcelable -import androidx.compose.runtime.Immutable import io.element.android.libraries.designsystem.components.avatar.AvatarData -import io.element.android.libraries.matrix.api.core.UserId -import kotlinx.parcelize.Parcelize +import io.element.android.libraries.designsystem.components.avatar.AvatarSize +import io.element.android.libraries.matrix.api.user.MatrixUser -@Parcelize -@Immutable -data class MatrixUser( - val id: UserId, - val username: String? = null, - val avatarData: AvatarData = AvatarData(id.value, username), -) : Parcelable +fun MatrixUser.getAvatarData(size: AvatarSize = AvatarSize.MEDIUM) = AvatarData( + id = userId.value, + name = displayName, + url = avatarUrl, + size = size, +) fun MatrixUser.getBestName(): String { - return username?.takeIf { it.isNotEmpty() } ?: id.value + return displayName?.takeIf { it.isNotEmpty() } ?: userId.value }