From 134b8f70a93da9964081ab94ec155e6045d32096 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Fri, 27 Oct 2023 19:18:22 +0300 Subject: [PATCH] Add message to room knock items --- .../room/knoks/KnockRequestViewModel.kt | 2 +- .../room/knoks/KnockRequestsDataSource.kt | 18 +++++++++++++++--- .../room/knoks/list/KnockRequestViewHolder.kt | 5 +++++ .../circles/core/model/KnockRequestListItem.kt | 3 ++- .../res/layout/list_item_knock_request.xml | 17 ++++++++++++++++- 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestViewModel.kt b/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestViewModel.kt index 7c14675f9..9887aca60 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestViewModel.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestViewModel.kt @@ -15,7 +15,7 @@ import javax.inject.Inject class KnockRequestViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val inviteRequestsDataSource: InviteRequestsDataSource, - private val knockRequestsDataSource: KnockRequestsDataSource + knockRequestsDataSource: KnockRequestsDataSource ) : ViewModel() { private val roomId: String = savedStateHandle.getOrThrow("roomId") diff --git a/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestsDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestsDataSource.kt index 7aeeb5705..22148cac3 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestsDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/knoks/KnockRequestsDataSource.kt @@ -4,16 +4,20 @@ import androidx.lifecycle.map import org.futo.circles.core.model.KnockRequestListItem import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.UserUtils +import org.matrix.android.sdk.api.query.QueryStringValue +import org.matrix.android.sdk.api.session.events.model.EventType.STATE_ROOM_MEMBER +import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.getRoom import org.matrix.android.sdk.api.session.room.members.roomMemberQueryParams import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.model.RoomMemberContent import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary import javax.inject.Inject class KnockRequestsDataSource @Inject constructor() { fun getKnockRequestsListItemsLiveData(roomId: String) = getKnockRequestLiveData(roomId)?.map { - it.map { user -> user.toKnockRequestListItem() } + it.map { user -> user.toKnockRequestListItem(roomId) } } fun getKnockRequestCountLiveData(roomId: String) = @@ -28,9 +32,17 @@ class KnockRequestsDataSource @Inject constructor() { } ) - private fun RoomMemberSummary.toKnockRequestListItem() = KnockRequestListItem( + private fun getReasonMessage(roomId: String, userId: String) = + MatrixSessionProvider.currentSession?.getRoom(roomId)?.stateService()?.getStateEvents( + setOf(STATE_ROOM_MEMBER), QueryStringValue.Contains(userId) + )?.firstOrNull { + it.content.toModel<RoomMemberContent>()?.membership == Membership.KNOCK + }?.content.toModel<RoomMemberContent>()?.safeReason + + private fun RoomMemberSummary.toKnockRequestListItem(roomId: String) = KnockRequestListItem( requesterId = userId, requesterName = displayName ?: UserUtils.removeDomainSuffix(userId), - requesterAvatarUrl = avatarUrl + requesterAvatarUrl = avatarUrl, + message = getReasonMessage(roomId, userId) ) } \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/feature/room/knoks/list/KnockRequestViewHolder.kt b/core/src/main/java/org/futo/circles/core/feature/room/knoks/list/KnockRequestViewHolder.kt index 5ceaa0242..c0634a697 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/knoks/list/KnockRequestViewHolder.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/knoks/list/KnockRequestViewHolder.kt @@ -5,6 +5,7 @@ import androidx.recyclerview.widget.RecyclerView import org.futo.circles.core.base.list.ViewBindingHolder import org.futo.circles.core.databinding.ListItemKnockRequestBinding import org.futo.circles.core.extensions.onClick +import org.futo.circles.core.extensions.setIsVisible import org.futo.circles.core.model.KnockRequestListItem import org.futo.circles.core.model.toCircleUser @@ -24,6 +25,10 @@ class KnockRequestViewHolder( } fun bind(data: KnockRequestListItem) { + binding.tvReason.apply { + setIsVisible(!data.message.isNullOrBlank()) + text = data.message + } binding.vUserLayout.bind(data.toCircleUser()) } } \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/model/KnockRequestListItem.kt b/core/src/main/java/org/futo/circles/core/model/KnockRequestListItem.kt index 54e49e8df..4b7becdc8 100644 --- a/core/src/main/java/org/futo/circles/core/model/KnockRequestListItem.kt +++ b/core/src/main/java/org/futo/circles/core/model/KnockRequestListItem.kt @@ -5,7 +5,8 @@ import org.futo.circles.core.base.list.IdEntity data class KnockRequestListItem( val requesterId: String, val requesterName: String, - val requesterAvatarUrl: String? + val requesterAvatarUrl: String?, + val message: String? ) : IdEntity<String> { override val id: String = requesterId } diff --git a/core/src/main/res/layout/list_item_knock_request.xml b/core/src/main/res/layout/list_item_knock_request.xml index 82644229c..08e07c234 100644 --- a/core/src/main/res/layout/list_item_knock_request.xml +++ b/core/src/main/res/layout/list_item_knock_request.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> @@ -14,6 +15,20 @@ app:layout_constraintTop_toTopOf="parent" /> + <TextView + android:id="@+id/tvReason" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginHorizontal="16dp" + android:layout_marginTop="8dp" + android:visibility="gone" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/vUserLayout" + tools:text="Message" + tools:visibility="visible" /> + + <com.google.android.material.button.MaterialButton android:id="@+id/btnInvite" style="@style/AccentButtonStyle" @@ -27,7 +42,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/btnDecline" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@id/vUserLayout" /> + app:layout_constraintTop_toBottomOf="@id/tvReason" /> <com.google.android.material.button.MaterialButton android:id="@+id/btnDecline" -- GitLab