diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt index 7dd0ce3e3c..cd2819eb5e 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchMultipleUsersResultItem.kt @@ -40,7 +40,7 @@ fun SearchMultipleUsersResultItem( CheckableUnresolvedUserRow( checked = isUserSelected, modifier = modifier, - avatarData = searchResult.matrixUser.getAvatarData(AvatarSize.Custom(36.dp)), + avatarData = searchResult.matrixUser.getAvatarData(AvatarSize.UserListItem), id = searchResult.matrixUser.userId.value, onCheckedChange = onCheckedChange, ) @@ -49,7 +49,7 @@ fun SearchMultipleUsersResultItem( checked = isUserSelected, modifier = modifier, matrixUser = searchResult.matrixUser, - avatarSize = AvatarSize.Custom(36.dp), + avatarSize = AvatarSize.UserListItem, onCheckedChange = onCheckedChange, ) } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt index f1279cfdec..924e82aa9e 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/components/SearchSingleUserResultItem.kt @@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.matrix.ui.components.MatrixUserRow @@ -39,21 +38,21 @@ fun SearchSingleUserResultItem( if (searchResult.isUnresolved) { UnresolvedUserRow( modifier = modifier.clickable(onClick = onClick), - avatarData = searchResult.matrixUser.getAvatarData(AvatarSize.Custom(36.dp)), + avatarData = searchResult.matrixUser.getAvatarData(AvatarSize.UserListItem), id = searchResult.matrixUser.userId.value, ) } else { MatrixUserRow( modifier = modifier.clickable(onClick = onClick), matrixUser = searchResult.matrixUser, - avatarSize = AvatarSize.Custom(36.dp), + avatarSize = AvatarSize.UserListItem, ) } } @Preview @Composable -internal fun SearchSingleUserResultItemPreview() = ElementThemedPreview{ ContentToPreview() } +internal fun SearchSingleUserResultItemPreview() = ElementThemedPreview { ContentToPreview() } @Composable private fun ContentToPreview() { diff --git a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListPresenter.kt b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListPresenter.kt index 1ba2c281ac..411a64da53 100644 --- a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListPresenter.kt +++ b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/InviteListPresenter.kt @@ -33,6 +33,7 @@ import io.element.android.libraries.architecture.Async import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.architecture.runCatchingUpdatingState import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.MatrixClient import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.room.RoomSummary @@ -158,12 +159,14 @@ class InviteListPresenter @Inject constructor( id = i.userId.value, name = i.displayName, url = i.avatarUrl, + size = AvatarSize.RoomListItem, ) else AvatarData( id = roomId.value, name = name, - url = avatarURLString + url = avatarURLString, + size = AvatarSize.RoomListItem, ) val alias = if (isDirect) @@ -186,6 +189,7 @@ class InviteListPresenter @Inject constructor( id = userId.value, name = displayName, url = avatarUrl, + size = AvatarSize.InviteSender, ), ) }, diff --git a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt index ba5497e2bc..b1a7873010 100644 --- a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt +++ b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/components/InviteSummaryRow.kt @@ -99,7 +99,7 @@ internal fun DefaultInviteSummaryRow( verticalAlignment = Alignment.Top ) { Avatar( - invite.roomAvatarData.copy(size = AvatarSize.Custom(52.dp)), + invite.roomAvatarData.copy(size = AvatarSize.RoomListItem), ) Column( @@ -178,7 +178,7 @@ private fun SenderRow(sender: InviteSender) { modifier = Modifier.padding(top = 6.dp), ) { Avatar( - avatarData = sender.avatarData.copy(size = AvatarSize.Custom(16.dp)), + avatarData = sender.avatarData.copy(size = AvatarSize.InviteSender), ) Text( text = stringResource(R.string.screen_invites_invited_you, sender.displayName, sender.userId.value).let { text -> diff --git a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/model/InviteListInviteSummary.kt b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/model/InviteListInviteSummary.kt index ed00867b94..33d5b0a493 100644 --- a/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/model/InviteListInviteSummary.kt +++ b/features/invitelist/impl/src/main/kotlin/io/element/android/features/invitelist/impl/model/InviteListInviteSummary.kt @@ -18,6 +18,7 @@ package io.element.android.features.invitelist.impl.model import androidx.compose.runtime.Immutable import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId @@ -26,14 +27,14 @@ data class InviteListInviteSummary( val roomId: RoomId, val roomName: String = "", val roomAlias: String? = null, - val roomAvatarData: AvatarData = AvatarData(roomId.value, roomName), + val roomAvatarData: AvatarData = AvatarData(roomId.value, roomName, size = AvatarSize.RoomListItem), val sender: InviteSender? = null, val isDirect: Boolean = false, val isNew: Boolean = false, ) -data class InviteSender( +data class InviteSender constructor( val userId: UserId, val displayName: String, - val avatarData: AvatarData = AvatarData(userId.value, displayName), + val avatarData: AvatarData = AvatarData(userId.value, displayName, size = AvatarSize.InviteSender), ) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt index d12c6ca901..c2cf4978d1 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesPresenter.kt @@ -118,7 +118,7 @@ class MessagesPresenter @AssistedInject constructor( id = room.roomId.value, name = room.name, url = room.avatarUrl, - size = AvatarSize.SMALL + size = AvatarSize.TimelineRoom ) roomName.value = room.name } diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt index 7691788e58..7811f37db8 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/MessagesStateProvider.kt @@ -26,6 +26,7 @@ import io.element.android.features.messages.impl.timeline.components.retrysendme import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.libraries.core.data.StableCharSequence import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.textcomposer.MessageComposerMode @@ -42,7 +43,7 @@ open class MessagesStateProvider : PreviewParameterProvider { fun aMessagesState() = MessagesState( roomId = RoomId("!id:domain"), roomName = "Room name", - roomAvatar = AvatarData("!id:domain", "Room name"), + roomAvatar = AvatarData("!id:domain", "Room name", size = AvatarSize.TimelineRoom), userHasPermissionToSendMessage = true, composerState = aMessageComposerState().copy( text = StableCharSequence("Hello"), diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt index 4a88a23fa2..4000cda565 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/actionlist/ActionListView.kt @@ -214,7 +214,7 @@ private fun SheetContent( @Composable private fun MessageSummary(event: TimelineItem.Event, modifier: Modifier = Modifier) { val content: @Composable () -> Unit - var icon: @Composable () -> Unit = { Avatar(avatarData = event.senderAvatar.copy(size = AvatarSize.SMALL)) } + var icon: @Composable () -> Unit = { Avatar(avatarData = event.senderAvatar.copy(size = AvatarSize.TimelineSender)) } val contentStyle = ElementTextStyles.Regular.bodyMD.copy(color = MaterialTheme.colorScheme.secondary) val imageModifier = Modifier .size(36.dp) diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt index c170886672..d1f96628f3 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/TimelineStateProvider.kt @@ -24,6 +24,7 @@ import io.element.android.features.messages.impl.timeline.model.event.TimelineIt import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemStateEventContent import io.element.android.features.messages.impl.timeline.model.event.aTimelineItemTextContent import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.api.timeline.MatrixTimeline @@ -107,7 +108,7 @@ internal fun aTimelineItemEvent( eventId = eventId, transactionId = transactionId, senderId = UserId("@senderId:domain"), - senderAvatar = AvatarData("@senderId:domain", "sender"), + senderAvatar = AvatarData("@senderId:domain", "sender", size = AvatarSize.TimelineSender), content = content, reactionsState = TimelineItemReactions( persistentListOf( diff --git a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt index 62aca35d6e..0aae6ea753 100644 --- a/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt +++ b/features/messages/impl/src/main/kotlin/io/element/android/features/messages/impl/timeline/factories/event/TimelineItemEventFactory.kt @@ -67,7 +67,7 @@ class TimelineItemEventFactory @Inject constructor( id = currentSender.value, name = senderDisplayName ?: currentSender.value, url = senderAvatarUrl, - size = AvatarSize.SMALL + size = AvatarSize.TimelineSender ) return TimelineItem.Event( id = currentTimelineItem.uniqueId, 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 e81e2b1a20..3e20fbbfaf 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 @@ -229,7 +229,7 @@ internal fun RoomHeaderSection( Column(modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { Box(modifier = Modifier.size(70.dp)) { Avatar( - avatarData = AvatarData(roomId, roomName, avatarUrl, AvatarSize.HUGE), + avatarData = AvatarData(roomId, roomName, avatarUrl, AvatarSize.RoomHeader), modifier = Modifier.fillMaxSize() ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt index 7ebcfa5fba..aa98bb75b7 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditView.kt @@ -218,7 +218,7 @@ private fun EditableAvatarView( when (state.roomAvatarUrl?.scheme) { null, "mxc" -> { Avatar( - avatarData = AvatarData(state.roomId, state.roomName, state.roomAvatarUrl?.toString(), size = AvatarSize.HUGE), + avatarData = AvatarData(state.roomId, state.roomName, state.roomAvatarUrl?.toString(), size = AvatarSize.RoomHeader), modifier = Modifier.fillMaxSize(), ) } diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt index 5c07351db5..9d5939a8f5 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/invite/RoomInviteMembersView.kt @@ -186,7 +186,7 @@ private fun RoomInviteMembersSearchBar( if (invitableUser.isUnresolved && !invitableUser.isAlreadyInvited && !invitableUser.isAlreadyJoined) { CheckableUnresolvedUserRow( checked = invitableUser.isSelected, - avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.MEDIUM), + avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.UserListItem), id = invitableUser.matrixUser.userId.value, onCheckedChange = { onUserToggled(invitableUser.matrixUser) }, modifier = Modifier.fillMaxWidth() @@ -195,7 +195,7 @@ private fun RoomInviteMembersSearchBar( CheckableUserRow( checked = invitableUser.isSelected, enabled = !invitableUser.isAlreadyInvited && !invitableUser.isAlreadyJoined, - avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.MEDIUM), + avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.UserListItem), name = invitableUser.matrixUser.getBestName(), subtext = when { // If they're already invited or joined we show that information diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt index 9c3a6b1ecf..5a45fe9685 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListView.kt @@ -191,7 +191,7 @@ private fun RoomMemberListItem( displayName = roomMember.displayName, avatarUrl = roomMember.avatarUrl ), - avatarSize = AvatarSize.Custom(36.dp), + avatarSize = AvatarSize.UserListItem, ) } 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 b9879be1cf..bfbd1de902 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 @@ -112,7 +112,7 @@ internal fun RoomMemberHeaderSection( Column(modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { Box(modifier = Modifier.size(70.dp)) { Avatar( - avatarData = AvatarData(userId, userName, avatarUrl, AvatarSize.HUGE), + avatarData = AvatarData(userId, userName, avatarUrl, AvatarSize.UserHeader), modifier = Modifier.fillMaxSize() ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt index 12791b8083..77b0587e31 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt @@ -37,6 +37,7 @@ import io.element.android.libraries.core.coroutine.parallelMap import io.element.android.libraries.core.extensions.orEmpty import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormatter import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.utils.SnackbarDispatcher import io.element.android.libraries.designsystem.utils.collectSnackbarMessageAsState import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter @@ -190,7 +191,8 @@ class RoomListPresenter @Inject constructor( val avatarData = AvatarData( id = roomSummary.identifier(), name = roomSummary.details.name, - url = roomSummary.details.avatarURLString + url = roomSummary.details.avatarURLString, + size = AvatarSize.RoomListItem, ) val roomIdentifier = roomSummary.identifier() RoomListRoomSummary( 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 32b09a288d..d4406f0330 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListStateProvider.kt @@ -21,6 +21,7 @@ import io.element.android.features.leaveroom.api.LeaveRoomState import io.element.android.features.roomlist.impl.model.RoomListRoomSummary import io.element.android.features.roomlist.impl.model.RoomListRoomSummaryPlaceholders import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.designsystem.utils.SnackbarMessage import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.UserId @@ -68,7 +69,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { hasUnread = true, timestamp = "14:18", lastMessage = "A very very very very long message which suites on two lines", - avatarData = AvatarData("!id", "R"), + avatarData = AvatarData("!id", "R", size = AvatarSize.RoomListItem), id = "!roomId:domain", roomId = RoomId("!roomId:domain") ), @@ -77,7 +78,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList { hasUnread = false, timestamp = "14:16", lastMessage = "A short message", - avatarData = AvatarData("!id", "Z"), + avatarData = AvatarData("!id", "Z", size = AvatarSize.RoomListItem), id = "!roomId2:domain", roomId = RoomId("!roomId2:domain") ), 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 5cfc0f782d..88dda1b454 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 @@ -126,7 +126,7 @@ private fun DefaultRoomListTopBar( ) { val avatarData by remember { derivedStateOf { - matrixUser.getAvatarData(size = AvatarSize.Custom(28.dp)) + matrixUser.getAvatarData(size = AvatarSize.CurrentUserTopBar) } } Avatar(avatarData, contentDescription = stringResource(CommonStrings.common_settings)) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt index 209371142e..248d064bf1 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/components/RoomSummaryRow.kt @@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn @@ -107,6 +108,7 @@ internal fun DefaultRoomSummaryRow( modifier = Modifier .fillMaxWidth() .padding(horizontal = 16.dp) + .defaultMinSize(minHeight = 84.dp) .height(IntrinsicSize.Min), verticalAlignment = CenterVertically ) { diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt index 734d1ce9e1..8ba6c26c0f 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummary.kt @@ -17,18 +17,18 @@ package io.element.android.features.roomlist.impl.model import androidx.compose.runtime.Immutable -import io.element.android.libraries.core.data.tryOrNull import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomId @Immutable -data class RoomListRoomSummary( +data class RoomListRoomSummary constructor( val id: String, val roomId: RoomId, val name: String = "", val hasUnread: Boolean = false, val timestamp: String? = null, val lastMessage: CharSequence? = null, - val avatarData: AvatarData = AvatarData(id, name), + val avatarData: AvatarData = AvatarData(id, name, size = AvatarSize.RoomListItem), val isPlaceholder: Boolean = false, ) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt index 47e3a8ca28..111217d7a2 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryPlaceholders.kt @@ -17,6 +17,7 @@ package io.element.android.features.roomlist.impl.model import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomId object RoomListRoomSummaryPlaceholders { @@ -29,7 +30,7 @@ object RoomListRoomSummaryPlaceholders { name = "Short name", timestamp = "hh:mm", lastMessage = "Last message for placeholder", - avatarData = AvatarData(id, "S") + avatarData = AvatarData(id, "S", size = AvatarSize.RoomListItem) ) } diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt index 4eee92d597..357de89d0f 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/model/RoomListRoomSummaryProvider.kt @@ -18,6 +18,7 @@ package io.element.android.features.roomlist.impl.model import androidx.compose.ui.tooling.preview.PreviewParameterProvider import io.element.android.libraries.designsystem.components.avatar.AvatarData +import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.core.RoomId open class RoomListRoomSummaryProvider : PreviewParameterProvider { @@ -39,6 +40,6 @@ fun aRoomListRoomSummary() = RoomListRoomSummary( hasUnread = false, timestamp = null, lastMessage = "Last message", - avatarData = AvatarData("!roomId", "Room name"), + avatarData = AvatarData("!roomId", "Room name", size = AvatarSize.RoomListItem), isPlaceholder = false, ) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt index 2797b81ffc..65abb31504 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/Avatar.kt @@ -17,7 +17,9 @@ package io.element.android.libraries.designsystem.components.avatar import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.runtime.Composable @@ -30,6 +32,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import coil.compose.AsyncImage import io.element.android.libraries.designsystem.preview.ElementThemedPreview @@ -109,4 +112,12 @@ private fun InitialsAvatar( @Preview(group = PreviewGroup.Avatars) @Composable fun AvatarPreview(@PreviewParameter(AvatarDataProvider::class) avatarData: AvatarData) = - ElementThemedPreview { Avatar(avatarData) } + ElementThemedPreview { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(16.dp) + ) { + Avatar(avatarData) + Text(text = avatarData.size.name + " " + avatarData.size.dp) + } + } 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 7bf4a51ce4..9ba984f565 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 @@ -23,7 +23,7 @@ data class AvatarData( val id: String, val name: String?, val url: String? = null, - val size: AvatarSize = AvatarSize.MEDIUM + val size: AvatarSize, ) { val initial by lazy { diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt index 61c76d80c3..1727fffd1c 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarDataProvider.kt @@ -20,15 +20,28 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider open class AvatarDataProvider : PreviewParameterProvider { override val values: Sequence - get() = sequenceOf( - anAvatarData(), - anAvatarData().copy(name = null), - anAvatarData().copy(url = "aUrl"), - ) + get() { + AvatarSize.values() + .also { it.sortBy { item -> item.name } } + .asSequence() + return AvatarSize.values().asSequence().map { + sequenceOf( + anAvatarData(size = it), + anAvatarData(size = it).copy(name = null), + anAvatarData(size = it).copy(url = "aUrl"), + ) + } + .flatten() + } } -fun anAvatarData(id: String = "@id_of_alice:server.org", name: String = "Alice") = AvatarData( +fun anAvatarData( // Let's the id not start with a 'a'. + id: String = "@id_of_alice:server.org", + name: String = "Alice", + size: AvatarSize = AvatarSize.RoomListItem, +) = AvatarData( id = id, name = name, + size = size, ) diff --git a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt index 97069bab6f..2010bc2a33 100644 --- a/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt +++ b/libraries/designsystem/src/main/kotlin/io/element/android/libraries/designsystem/components/avatar/AvatarSize.kt @@ -19,13 +19,19 @@ package io.element.android.libraries.designsystem.components.avatar import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -sealed class AvatarSize(open val dp: Dp) { +enum class AvatarSize(val dp: Dp) { + CurrentUserTopBar(28.dp), - object SMALL : AvatarSize(32.dp) - object MEDIUM : AvatarSize(40.dp) - object BIG : AvatarSize(48.dp) - object HUGE : AvatarSize(96.dp) + RoomHeader(96.dp), + RoomListItem(52.dp), - // FIXME maybe remove this field and switch back to an enum (or remove this class) when design system will be integrated - data class Custom(override val dp: Dp) : AvatarSize(dp) + UserHeader(96.dp), + UserListItem(36.dp), + + SelectedUser(56.dp), + + TimelineRoom(32.dp), + TimelineSender(32.dp), + + InviteSender(16.dp), } 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 2ffc6bdc9b..518fb21fe1 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 @@ -42,7 +42,7 @@ fun CheckableMatrixUserRow( checked: Boolean, matrixUser: MatrixUser, modifier: Modifier = Modifier, - avatarSize: AvatarSize = AvatarSize.MEDIUM, + avatarSize: AvatarSize = AvatarSize.UserListItem, onCheckedChange: (Boolean) -> Unit = {}, enabled: Boolean = true, ) = CheckableUserRow( 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 1bfa226725..06551987ec 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 @@ -57,7 +57,7 @@ fun MatrixUserHeader( horizontalAlignment = Alignment.CenterHorizontally ) { Avatar( - matrixUser.getAvatarData(size = AvatarSize.HUGE), + matrixUser.getAvatarData(size = AvatarSize.UserHeader), ) Spacer(modifier = Modifier.height(16.dp)) // Name 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 ce1e4dad4e..eb8d246596 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 @@ -49,7 +49,7 @@ import io.element.android.libraries.matrix.ui.model.getBestName fun MatrixUserRow( matrixUser: MatrixUser, modifier: Modifier = Modifier, - avatarSize: AvatarSize = AvatarSize.Custom(36.dp), + avatarSize: AvatarSize = AvatarSize.UserListItem, ) = UserRow( avatarData = matrixUser.getAvatarData(avatarSize), name = matrixUser.getBestName(), diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt index ed6dc7e95a..ad5b2613cb 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/SelectedUser.kt @@ -55,13 +55,14 @@ fun SelectedUser( modifier: Modifier = Modifier, onUserRemoved: (MatrixUser) -> Unit = {}, ) { - Box(modifier = modifier - .width(56.dp) + Box( + modifier = modifier + .width(AvatarSize.SelectedUser.dp) ) { Column( horizontalAlignment = Alignment.CenterHorizontally, ) { - Avatar(matrixUser.getAvatarData(size = AvatarSize.Custom(56.dp))) + Avatar(matrixUser.getAvatarData(size = AvatarSize.SelectedUser)) Text( text = matrixUser.getBestName(), overflow = TextOverflow.Ellipsis, diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt index 809636679d..145482a2f2 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/UnresolvedUserRow.kt @@ -82,7 +82,9 @@ fun UnresolvedUserRow( ) // Warning - Row(modifier = Modifier.fillMaxWidth().padding(top = 3.dp)) { + Row(modifier = Modifier + .fillMaxWidth() + .padding(top = 3.dp)) { Icon( imageVector = Icons.Filled.Error, contentDescription = "", @@ -141,7 +143,7 @@ fun CheckableUnresolvedUserRow( internal fun UnresolvedUserRowPreview() = ElementThemedPreview { val matrixUser = aMatrixUser() - UnresolvedUserRow(matrixUser.getAvatarData(), matrixUser.userId.value) + UnresolvedUserRow(matrixUser.getAvatarData(size = AvatarSize.UserListItem), matrixUser.userId.value) } @Preview @@ -150,9 +152,9 @@ internal fun CheckableUnresolvedUserRowPreview() = ElementThemedPreview { val matrixUser = aMatrixUser() Column { - CheckableUnresolvedUserRow(false, matrixUser.getAvatarData(AvatarSize.Custom(36.dp)), matrixUser.userId.value) - CheckableUnresolvedUserRow(true, matrixUser.getAvatarData(AvatarSize.Custom(36.dp)), matrixUser.userId.value) - CheckableUnresolvedUserRow(false, matrixUser.getAvatarData(AvatarSize.Custom(36.dp)), matrixUser.userId.value, enabled = false) - CheckableUnresolvedUserRow(true, matrixUser.getAvatarData(AvatarSize.Custom(36.dp)), matrixUser.userId.value, enabled = false) + CheckableUnresolvedUserRow(false, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value) + CheckableUnresolvedUserRow(true, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value) + CheckableUnresolvedUserRow(false, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value, enabled = false) + CheckableUnresolvedUserRow(true, matrixUser.getAvatarData(AvatarSize.UserListItem), matrixUser.userId.value, enabled = false) } } diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt index 4d834349a1..813f4744b0 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/model/MatrixUserExtensions.kt @@ -20,7 +20,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarData import io.element.android.libraries.designsystem.components.avatar.AvatarSize import io.element.android.libraries.matrix.api.user.MatrixUser -fun MatrixUser.getAvatarData(size: AvatarSize = AvatarSize.MEDIUM) = AvatarData( +fun MatrixUser.getAvatarData(size: AvatarSize) = AvatarData( id = userId.value, name = displayName, url = avatarUrl,