diff --git a/app/src/main/java/org/futo/circles/feature/people/category/PeopleCategoryDataSource.kt b/app/src/main/java/org/futo/circles/feature/people/category/PeopleCategoryDataSource.kt index be9efbfb614586e51e3f12beba851c65946cea9d..dbb3f23b937a3b9f906626c2367d86b7debb4de1 100644 --- a/app/src/main/java/org/futo/circles/feature/people/category/PeopleCategoryDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/people/category/PeopleCategoryDataSource.kt @@ -5,7 +5,6 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import org.futo.circles.core.extensions.getKnownUsersFlow import org.futo.circles.core.extensions.getRoomOwner -import org.futo.circles.core.feature.workspace.SharedCircleDataSource import org.futo.circles.core.feature.workspace.SpacesTreeAccountDataSource import org.futo.circles.core.model.CIRCLES_SPACE_ACCOUNT_DATA_KEY import org.futo.circles.core.provider.MatrixSessionProvider @@ -20,8 +19,7 @@ import org.matrix.android.sdk.api.session.user.model.User import javax.inject.Inject class PeopleCategoryDataSource @Inject constructor( - private val spacesTreeAccountDataSource: SpacesTreeAccountDataSource, - private val sharedCircleDataSource: SharedCircleDataSource + private val spacesTreeAccountDataSource: SpacesTreeAccountDataSource ) { private val session = MatrixSessionProvider.getSessionOrThrow() @@ -46,9 +44,6 @@ class PeopleCategoryDataSource @Inject constructor( } } - - fun getProfileRoomId() = sharedCircleDataSource.getSharedCirclesSpaceId() ?: "" - fun getIgnoredUserFlow() = session.userService().getIgnoredUsersLive().asFlow() //All the joined members (except me) in all of my circle timeline rooms diff --git a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt index 9fbbce068291ee81d60215ccbd331ac410b1ef74..0769c4b6f7fef51279b5429fa71d403b4f5bfd22 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDataSource.kt @@ -1,88 +1,34 @@ package org.futo.circles.core.feature.room.invites import androidx.lifecycle.asFlow -import androidx.lifecycle.map import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.update import kotlinx.coroutines.withContext import org.futo.circles.core.extensions.createResult import org.futo.circles.core.extensions.getKnownUsersFlow -import org.futo.circles.core.feature.room.knoks.KnockRequestsDataSource -import org.futo.circles.core.feature.workspace.SharedCircleDataSource -import org.futo.circles.core.mapping.toCirclesUserSummary -import org.futo.circles.core.model.ConnectionInviteListItem -import org.futo.circles.core.model.FollowRequestListItem import org.futo.circles.core.model.GALLERY_TYPE import org.futo.circles.core.model.GROUP_TYPE -import org.futo.circles.core.model.InviteHeader -import org.futo.circles.core.model.InviteListItem import org.futo.circles.core.model.InviteTypeArg import org.futo.circles.core.model.RoomInviteListItem import org.futo.circles.core.model.TIMELINE_TYPE import org.futo.circles.core.model.convertToCircleRoomType -import org.futo.circles.core.model.toCircleUser import org.futo.circles.core.model.toRoomInviteListItem import org.futo.circles.core.provider.MatrixSessionProvider import org.futo.circles.core.utils.getAllCirclesRoomsLiveData -import org.futo.circles.core.utils.getSpacesLiveData import org.matrix.android.sdk.api.session.getRoom -import org.matrix.android.sdk.api.session.getUserOrDefault import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomSummary -import org.matrix.android.sdk.api.session.room.model.RoomType import javax.inject.Inject -class InvitesDataSource @Inject constructor( - private val knockRequestsDataSource: KnockRequestsDataSource, - sharedCircleDataSource: SharedCircleDataSource -) { +class InvitesDataSource @Inject constructor() { - private val session = MatrixSessionProvider.currentSession - private val profileRoomId = sharedCircleDataSource.getSharedCirclesSpaceId() ?: "" private val roomIdsToUnblurProfile = MutableStateFlow<Set<String>>(emptySet()) - fun getInvitesFlow(type: InviteTypeArg) = when (type) { - InviteTypeArg.People -> getPeopleInvites() - else -> getRoomInvitesFlow(type) - } - - private fun getPeopleInvites() = combine( - getProfileSpaceInvitesFlow(), - getProfileRoomMembersKnockFlow() - ) { invites, knocks -> - val list = mutableListOf<InviteListItem>() - if (invites.isNotEmpty()) { - list.add(InviteHeader.connectInvitesHeader) - list.addAll(invites) - } - if (knocks.isNotEmpty()) { - list.add(InviteHeader.followRequestHeader) - list.addAll(knocks) - } - list - } - - private fun getProfileRoomMembersKnockFlow(): Flow<List<FollowRequestListItem>> = - knockRequestsDataSource.getKnockRequestsListItemsLiveData(profileRoomId).map { list -> - list.map { FollowRequestListItem(it.toCircleUser(), it.message) } - }.asFlow() - - private fun getProfileSpaceInvitesFlow(): Flow<List<ConnectionInviteListItem>> = - getSpacesLiveData(listOf(Membership.INVITE)).map { - it.filter { it.roomType == RoomType.SPACE }.map { summary -> - ConnectionInviteListItem( - summary.roomId, - session.getUserOrDefault(summary.inviterId ?: "").toCirclesUserSummary() - ) - } - }.asFlow() - - private fun getRoomInvitesFlow( + fun getRoomInvitesFlow( inviteType: InviteTypeArg ): Flow<List<RoomInviteListItem>> = combine( getAllCirclesRoomsLiveData(listOf(Membership.INVITE)).asFlow(), @@ -96,7 +42,6 @@ class InvitesDataSource @Inject constructor( InviteTypeArg.Circle -> it.roomType == TIMELINE_TYPE InviteTypeArg.Group -> it.roomType == GROUP_TYPE InviteTypeArg.Photo -> it.roomType == GALLERY_TYPE - else -> false } }.map { it.toRoomInviteListItem( @@ -121,11 +66,4 @@ class InvitesDataSource @Inject constructor( fun unblurProfileImageFor(id: String) { roomIdsToUnblurProfile.update { set -> set.toMutableSet().apply { add(id) } } } - - suspend fun acceptFollowRequest(userId: String) = createResult { - session?.roomService()?.getRoom(profileRoomId)?.membershipService()?.invite(userId) - } - - suspend fun declineFollowRequest(userId: String) = - createResult { session?.getRoom(profileRoomId)?.membershipService()?.remove(userId) } } \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDialogFragment.kt b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDialogFragment.kt index 0ef34094a050196f7d3a542fd6217faad1b876c8..7f09380a55ab70bc3c924e7822b7385605d5660d 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDialogFragment.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesDialogFragment.kt @@ -15,9 +15,6 @@ import org.futo.circles.core.extensions.observeResponse import org.futo.circles.core.extensions.showNoInternetConnection import org.futo.circles.core.feature.room.invites.list.InvitesAdapter import org.futo.circles.core.model.CircleRoomTypeArg -import org.futo.circles.core.model.ConnectionInviteListItem -import org.futo.circles.core.model.FollowRequestListItem -import org.futo.circles.core.model.InviteListItem import org.futo.circles.core.model.InviteTypeArg import org.futo.circles.core.model.RoomInviteListItem import org.futo.circles.core.view.EmptyTabPlaceholderView @@ -66,26 +63,16 @@ class InvitesDialogFragment : InviteTypeArg.Circle -> R.string.circle_invitations InviteTypeArg.Group -> R.string.group_invitations InviteTypeArg.Photo -> R.string.gallery_invitations - InviteTypeArg.People -> R.string.connection_invites_requests } ) private fun getEmptyMessage() = getString(R.string.no_new_invitations_format, getTitle()) - private fun onInviteClicked(item: InviteListItem, isAccepted: Boolean) { + private fun onInviteClicked(item: RoomInviteListItem, isAccepted: Boolean) { if (showNoInternetConnection()) return - when (item) { - is ConnectionInviteListItem -> viewModel.onConnectionInviteAnswered( - item.roomId, isAccepted - ) - - is FollowRequestListItem -> viewModel.onFollowRequestAnswered(item.id, isAccepted) - is RoomInviteListItem -> when (item.roomType) { - CircleRoomTypeArg.Circle -> handleCircleInvite(item.id, isAccepted) - else -> handleRoomInvite(item.id, isAccepted, item.roomType) - } - - else -> {} + when (item.roomType) { + CircleRoomTypeArg.Circle -> handleCircleInvite(item.id, isAccepted) + else -> handleRoomInvite(item.id, isAccepted, item.roomType) } } @@ -106,5 +93,4 @@ class InvitesDialogFragment : ) } - } \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesViewModel.kt b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesViewModel.kt index aae3081014671d76c3a0f39ee74ca01be9640f05..352c9b095889de637ef5cbbea81478b0ec26ec23 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesViewModel.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/invites/InvitesViewModel.kt @@ -11,12 +11,7 @@ import org.futo.circles.core.extensions.Response import org.futo.circles.core.extensions.getOrThrow import org.futo.circles.core.extensions.launchBg import org.futo.circles.core.feature.room.invite.ManageInviteRequestsDataSource -import org.futo.circles.core.feature.workspace.SharedCircleDataSource import org.futo.circles.core.model.CircleRoomTypeArg -import org.futo.circles.core.model.ConnectionInviteListItem -import org.futo.circles.core.model.FollowRequestListItem -import org.futo.circles.core.model.InviteHeader -import org.futo.circles.core.model.InviteListItem import org.futo.circles.core.model.InviteTypeArg import org.futo.circles.core.model.RoomInviteListItem import javax.inject.Inject @@ -25,36 +20,21 @@ import javax.inject.Inject class InvitesViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val dataSource: InvitesDataSource, - private val manageInviteRequestsDataSource: ManageInviteRequestsDataSource, - private val sharedCircleDataSource: SharedCircleDataSource + private val manageInviteRequestsDataSource: ManageInviteRequestsDataSource ) : ViewModel() { private val inviteType: InviteTypeArg = savedStateHandle.getOrThrow("type") val inviteResultLiveData = SingleEventLiveData<Response<Unit?>>() private val loadingItemsIdsList = MutableLiveData<Set<String>>(emptySet()) - val invitesLiveData = MediatorLiveData<List<InviteListItem>>().also { + val invitesLiveData = MediatorLiveData<List<RoomInviteListItem>>().also { it.addSource(loadingItemsIdsList) { loadingItemsValue -> val currentList = it.value ?: emptyList() it.postValue(currentList.map { item -> - when (item) { - is ConnectionInviteListItem -> item.copy( - isLoading = loadingItemsValue.contains(item.id) - ) - - is FollowRequestListItem -> item.copy( - isLoading = loadingItemsValue.contains(item.id) - ) - - is RoomInviteListItem -> item.copy( - isLoading = loadingItemsValue.contains(item.id) - ) - - is InviteHeader -> item - } + item.copy(isLoading = loadingItemsValue.contains(item.id)) }) } - it.addSource(dataSource.getInvitesFlow(inviteType).asLiveData()) { value -> + it.addSource(dataSource.getRoomInvitesFlow(inviteType).asLiveData()) { value -> it.postValue(value) } } @@ -77,29 +57,10 @@ class InvitesViewModel @Inject constructor( } } - fun onFollowRequestAnswered(userId: String, accepted: Boolean) { - launchBg { - toggleItemLoading(userId) - val result = if (accepted) dataSource.acceptFollowRequest(userId) - else dataSource.declineFollowRequest(userId) - postInviteResult(result, userId) - } - } - fun unblurProfileIcon(roomId: String) { dataSource.unblurProfileImageFor(roomId) } - fun onConnectionInviteAnswered(roomId: String, accepted: Boolean) { - if (accepted) - launchBg { - toggleItemLoading(roomId) - val result = sharedCircleDataSource.acceptSharedCircleInvite(roomId) - postInviteResult(result, roomId) - } - else rejectRoomInvite(roomId) - } - private fun postInviteResult(result: Response<Unit?>, id: String) { inviteResultLiveData.postValue(result) toggleItemLoading(id) diff --git a/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesAdapter.kt b/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesAdapter.kt index 3a619e8e3319105b34e09652423c85f678868eb9..d479fcd953744a7d7c0ef1fab8183847f77a2d6e 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesAdapter.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesAdapter.kt @@ -3,28 +3,19 @@ package org.futo.circles.core.feature.room.invites.list import android.view.ViewGroup import org.futo.circles.core.base.list.BaseRvAdapter import org.futo.circles.core.model.CircleRoomTypeArg -import org.futo.circles.core.model.ConnectionInviteListItem -import org.futo.circles.core.model.FollowRequestListItem -import org.futo.circles.core.model.InviteHeader -import org.futo.circles.core.model.InviteListItem import org.futo.circles.core.model.RoomInviteListItem -enum class InviteViewType { Circle, Group, Photo, Header, PeopleInvite, PeopleKnock } +enum class InviteViewType { Circle, Group, Photo } class InvitesAdapter( - private val onInviteClicked: (InviteListItem, Boolean) -> Unit, - private val onUnblurProfileIconClicked: (InviteListItem) -> Unit -) : BaseRvAdapter<InviteListItem, InviteViewHolder>(DefaultIdEntityCallback()) { - - override fun getItemViewType(position: Int): Int = when (val item = getItem(position)) { - is ConnectionInviteListItem -> InviteViewType.PeopleInvite.ordinal - is FollowRequestListItem -> InviteViewType.PeopleKnock.ordinal - is InviteHeader -> InviteViewType.Header.ordinal - is RoomInviteListItem -> when (item.roomType) { - CircleRoomTypeArg.Circle -> InviteViewType.Circle.ordinal - CircleRoomTypeArg.Group -> InviteViewType.Group.ordinal - CircleRoomTypeArg.Photo -> InviteViewType.Photo.ordinal - } + private val onInviteClicked: (RoomInviteListItem, Boolean) -> Unit, + private val onUnblurProfileIconClicked: (RoomInviteListItem) -> Unit +) : BaseRvAdapter<RoomInviteListItem, InviteViewHolder>(DefaultIdEntityCallback()) { + + override fun getItemViewType(position: Int): Int = when (getItem(position).roomType) { + CircleRoomTypeArg.Circle -> InviteViewType.Circle.ordinal + CircleRoomTypeArg.Group -> InviteViewType.Group.ordinal + CircleRoomTypeArg.Photo -> InviteViewType.Photo.ordinal } override fun onCreateViewHolder( @@ -58,19 +49,6 @@ class InvitesAdapter( onShowProfileIconClicked = { position -> onUnblurProfileIconClicked(getItem(position)) }) - - InviteViewType.Header -> InviteHeaderViewHolder(parent) - InviteViewType.PeopleInvite -> ConnectionInviteViewHolder( - parent = parent, - onRequestClicked = { position, isAccepted -> - onInviteClicked(getItem(position), isAccepted) - }) - - InviteViewType.PeopleKnock -> FollowRequestViewHolder( - parent = parent, - onRequestClicked = { position, isAccepted -> - onInviteClicked(getItem(position), isAccepted) - }) } diff --git a/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesViewHolder.kt b/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesViewHolder.kt index 24b4c012e83f602fb8c28311fa3f733024365c80..6edb90583f82a7d89bd2c2a707d933155ae14176 100644 --- a/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesViewHolder.kt +++ b/core/src/main/java/org/futo/circles/core/feature/room/invites/list/InvitesViewHolder.kt @@ -6,26 +6,17 @@ import androidx.recyclerview.widget.RecyclerView import org.futo.circles.core.R import org.futo.circles.core.base.list.ViewBindingHolder import org.futo.circles.core.base.list.context -import org.futo.circles.core.databinding.ListItemConnectionInviteBinding -import org.futo.circles.core.databinding.ListItemInviteHeaderBinding import org.futo.circles.core.databinding.ListItemInvitedCircleBinding import org.futo.circles.core.databinding.ListItemInvitedGalleryBinding import org.futo.circles.core.databinding.ListItemInvitedGroupBinding -import org.futo.circles.core.databinding.ListItemPeopleRequestBinding import org.futo.circles.core.extensions.loadRoomProfileIcon -import org.futo.circles.core.extensions.loadUserProfileIcon import org.futo.circles.core.extensions.onClick import org.futo.circles.core.extensions.setIsEncryptedIcon import org.futo.circles.core.extensions.setIsVisible -import org.futo.circles.core.model.CirclesUserSummary -import org.futo.circles.core.model.ConnectionInviteListItem -import org.futo.circles.core.model.FollowRequestListItem -import org.futo.circles.core.model.InviteHeader -import org.futo.circles.core.model.InviteListItem import org.futo.circles.core.model.RoomInviteListItem abstract class InviteViewHolder(view: View) : RecyclerView.ViewHolder(view) { - abstract fun bind(data: InviteListItem) + abstract fun bind(data: RoomInviteListItem) } @@ -45,9 +36,7 @@ class InvitedGroupViewHolder( onClick(binding.ivGroup) { position -> onShowProfileIconClicked(position) } } - override fun bind(data: InviteListItem) { - if (data !is RoomInviteListItem) return - + override fun bind(data: RoomInviteListItem) { with(binding) { setLoading(data.isLoading) ivGroup.loadRoomProfileIcon( @@ -90,9 +79,7 @@ class InvitedCircleViewHolder( onClick(binding.ivCircle) { position -> onShowProfileIconClicked(position) } } - override fun bind(data: InviteListItem) { - if (data !is RoomInviteListItem) return - + override fun bind(data: RoomInviteListItem) { with(binding) { setLoading(data.isLoading) tvShowProfileImage.setIsVisible(data.shouldBlurIcon) @@ -135,9 +122,7 @@ class InvitedGalleryViewHolder( onClick(binding.ivGallery) { position -> onShowProfileIconClicked(position) } } - override fun bind(data: InviteListItem) { - if (data !is RoomInviteListItem) return - + override fun bind(data: RoomInviteListItem) { with(binding) { setLoading(data.isLoading) tvGalleryTitle.text = data.info.title @@ -159,95 +144,3 @@ class InvitedGalleryViewHolder( } } } - -class FollowRequestViewHolder( - parent: ViewGroup, - private val onRequestClicked: (Int, Boolean) -> Unit -) : InviteViewHolder(inflate(parent, ListItemPeopleRequestBinding::inflate)) { - - private companion object : ViewBindingHolder - - private val binding = baseBinding as ListItemPeopleRequestBinding - - init { - onClick(binding.btnAccept) { position -> onRequestClicked(position, true) } - onClick(binding.btnDecline) { position -> onRequestClicked(position, false) } - } - - override fun bind(data: InviteListItem) { - if (data !is FollowRequestListItem) return - - setLoading(data.isLoading) - bindUser(data.user) - binding.tvReasonMessage.apply { - setIsVisible(data.reasonMessage != null) - text = data.reasonMessage - } - } - - private fun bindUser(user: CirclesUserSummary) { - with(binding) { - tvUserName.text = user.name - ivUserImage.loadUserProfileIcon(user.avatarUrl, user.id) - } - } - - private fun setLoading(isLoading: Boolean) { - with(binding) { - vLoading.setIsVisible(isLoading) - btnAccept.setIsVisible(!isLoading) - btnDecline.setIsVisible(!isLoading) - } - } -} - -class ConnectionInviteViewHolder( - parent: ViewGroup, - private val onRequestClicked: (Int, Boolean) -> Unit -) : InviteViewHolder(inflate(parent, ListItemConnectionInviteBinding::inflate)) { - - private companion object : ViewBindingHolder - - private val binding = baseBinding as ListItemConnectionInviteBinding - - init { - onClick(binding.btnAccept) { position -> onRequestClicked(position, true) } - onClick(binding.btnDecline) { position -> onRequestClicked(position, false) } - } - - override fun bind(data: InviteListItem) { - if (data !is ConnectionInviteListItem) return - - setLoading(data.isLoading) - bindUser(data.user) - } - - private fun bindUser(user: CirclesUserSummary) { - with(binding) { - tvUserName.text = user.name - ivUserImage.loadUserProfileIcon(user.avatarUrl, user.id) - } - } - - private fun setLoading(isLoading: Boolean) { - with(binding) { - vLoading.setIsVisible(isLoading) - btnAccept.setIsVisible(!isLoading) - btnDecline.setIsVisible(!isLoading) - } - } -} - -class InviteHeaderViewHolder( - parent: ViewGroup, -) : InviteViewHolder(inflate(parent, ListItemInviteHeaderBinding::inflate)) { - - private companion object : ViewBindingHolder - - private val binding = baseBinding as ListItemInviteHeaderBinding - - override fun bind(data: InviteListItem) { - if (data !is InviteHeader) return - binding.tvHeader.text = context.getString(data.titleRes) - } -} diff --git a/core/src/main/java/org/futo/circles/core/model/InviteTypeArg.kt b/core/src/main/java/org/futo/circles/core/model/InviteTypeArg.kt index 9c917551d9a0d7f57f14296252c1abcf8d36b06d..f31238666a57e2726ea5cab49e79dea14157d97e 100644 --- a/core/src/main/java/org/futo/circles/core/model/InviteTypeArg.kt +++ b/core/src/main/java/org/futo/circles/core/model/InviteTypeArg.kt @@ -1,3 +1,3 @@ package org.futo.circles.core.model -enum class InviteTypeArg { Circle, Group, Photo, People } \ No newline at end of file +enum class InviteTypeArg { Circle, Group, Photo } \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/model/RoomInviteListItem.kt b/core/src/main/java/org/futo/circles/core/model/RoomInviteListItem.kt new file mode 100644 index 0000000000000000000000000000000000000000..ecf322a95fb3f7b8bd227c947316a19886ffaca5 --- /dev/null +++ b/core/src/main/java/org/futo/circles/core/model/RoomInviteListItem.kt @@ -0,0 +1,34 @@ +package org.futo.circles.core.model + +import org.futo.circles.core.base.list.IdEntity +import org.futo.circles.core.extensions.notEmptyDisplayName +import org.futo.circles.core.mapping.toRoomInfo +import org.futo.circles.core.provider.MatrixSessionProvider +import org.matrix.android.sdk.api.session.getUserOrDefault +import org.matrix.android.sdk.api.session.room.model.RoomSummary + +data class RoomInviteListItem( + val roomId: String, + val roomType: CircleRoomTypeArg, + val info: RoomInfo, + val isEncrypted: Boolean, + val inviterName: String, + val shouldBlurIcon: Boolean, + val isLoading: Boolean = false +) : IdEntity<String> { + override val id: String = roomId +} + +fun RoomSummary.toRoomInviteListItem(roomType: CircleRoomTypeArg, shouldBlurIcon: Boolean) = + RoomInviteListItem( + roomId = roomId, + info = toRoomInfo(), + inviterName = getInviterName(), + isEncrypted = isEncrypted, + shouldBlurIcon = shouldBlurIcon, + roomType = roomType + ) + +fun RoomSummary.getInviterName() = + MatrixSessionProvider.currentSession?.getUserOrDefault(inviterId ?: "")?.notEmptyDisplayName() + ?: "" \ No newline at end of file diff --git a/core/src/main/res/layout/list_item_connection_invite.xml b/core/src/main/res/layout/list_item_connection_invite.xml deleted file mode 100644 index efcf47b6c62bc2266e2489ca4a14f3ef0069edc9..0000000000000000000000000000000000000000 --- a/core/src/main/res/layout/list_item_connection_invite.xml +++ /dev/null @@ -1,94 +0,0 @@ -<?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" - android:paddingHorizontal="8dp" - android:paddingVertical="4dp" - tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> - - <com.google.android.material.imageview.ShapeableImageView - android:id="@+id/ivUserImage" - android:layout_width="72dp" - android:layout_height="72dp" - android:scaleType="centerCrop" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize50Percent" - tools:background="@color/blue" /> - - <TextView - android:id="@+id/tvUserName" - style="@style/title2" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:ellipsize="end" - android:lines="1" - app:layout_constraintBottom_toTopOf="@id/tvInvitesToConnect" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/ivUserImage" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_chainStyle="packed" - tools:text="Android01" /> - - <TextView - android:id="@+id/tvInvitesToConnect" - style="@style/subheadline" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:ellipsize="end" - android:lines="1" - android:text="@string/invites_you_to_connect" - android:textSize="13sp" - app:layout_constraintEnd_toEndOf="@id/tvUserName" - app:layout_constraintStart_toStartOf="@id/tvUserName" - app:layout_constraintTop_toBottomOf="@id/tvUserName" /> - - - <com.google.android.material.button.MaterialButton - android:id="@+id/btnAccept" - style="@style/AccentButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="4dp" - android:layout_marginEnd="8dp" - android:padding="0dp" - android:text="@string/accept" - android:textSize="14sp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@id/btnDecline" - app:layout_constraintStart_toEndOf="@id/ivUserImage" - app:layout_constraintTop_toBottomOf="@id/tvInvitesToConnect" - - /> - - <com.google.android.material.button.MaterialButton - android:id="@+id/btnDecline" - style="@style/NegativeButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="0dp" - android:text="@string/decline" - android:textSize="14sp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/btnAccept" - app:layout_constraintTop_toTopOf="@id/btnAccept" /> - - - <ProgressBar - android:id="@+id/vLoading" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginTop="4dp" - android:visibility="gone" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/ivUserImage" - app:layout_constraintTop_toBottomOf="@+id/tvInvitesToConnect" /> - -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/core/src/main/res/layout/list_item_people_request.xml b/core/src/main/res/layout/list_item_people_request.xml deleted file mode 100644 index d8f60007d63d042776c7ecc13c35b16042c7d83c..0000000000000000000000000000000000000000 --- a/core/src/main/res/layout/list_item_people_request.xml +++ /dev/null @@ -1,110 +0,0 @@ -<?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" - android:paddingHorizontal="8dp" - android:paddingVertical="4dp" - tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> - - <com.google.android.material.imageview.ShapeableImageView - android:id="@+id/ivUserImage" - android:layout_width="72dp" - android:layout_height="72dp" - android:scaleType="centerCrop" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.App.CornerSize50Percent" - tools:background="@color/blue" /> - - <TextView - android:id="@+id/tvUserName" - style="@style/title2" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" - android:ellipsize="end" - android:lines="1" - app:layout_constraintBottom_toTopOf="@id/tvFollowText" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/ivUserImage" - app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_chainStyle="packed" - tools:text="Android01" /> - - <TextView - android:id="@+id/tvFollowText" - style="@style/subheadline" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:ellipsize="end" - android:lines="1" - android:text="@string/requests_to_follow_you" - android:textSize="13sp" - app:layout_constraintEnd_toEndOf="@id/tvUserName" - app:layout_constraintStart_toStartOf="@id/tvUserName" - app:layout_constraintTop_toBottomOf="@id/tvUserName" /> - - <TextView - android:id="@+id/tvReasonMessage" - style="@style/subheadline" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginTop="4dp" - android:ellipsize="end" - android:maxLines="3" - android:textSize="13sp" - android:visibility="gone" - app:layout_constraintEnd_toEndOf="@id/tvUserName" - app:layout_constraintStart_toStartOf="@id/tvUserName" - app:layout_constraintTop_toBottomOf="@id/tvFollowText" - tools:text="Reason message messagemessagemessagemessagemessagemessagemessagemessagemessagemessagemessage" - tools:visibility="visible" /> - - <com.google.android.material.button.MaterialButton - android:id="@+id/btnAccept" - style="@style/AccentButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginTop="4dp" - android:layout_marginEnd="8dp" - android:padding="0dp" - android:text="@string/accept" - android:textSize="14sp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@id/btnDecline" - app:layout_constraintStart_toEndOf="@id/ivUserImage" - app:layout_constraintTop_toBottomOf="@id/tvReasonMessage" - - /> - - <com.google.android.material.button.MaterialButton - android:id="@+id/btnDecline" - style="@style/NegativeButtonStyle" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:padding="0dp" - android:text="@string/decline" - android:textSize="14sp" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/btnAccept" - app:layout_constraintTop_toTopOf="@id/btnAccept" /> - - - <ProgressBar - android:id="@+id/vLoading" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="center" - android:layout_marginTop="4dp" - android:visibility="gone" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/ivUserImage" - app:layout_constraintTop_toBottomOf="@+id/tvReasonMessage" /> - - -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index 1df4cca11ce30107647a12709b9d64a8b672c46e..1f314a129b11ce8507506a4ade84fd4862f40d44 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -133,7 +133,6 @@ <string name="create">Create</string> <string name="show">Show</string> <string name="gallery_invites_notification_format">Show %d Gallery invitations</string> - <string name="connection_invites_requests">Connection invites/requests</string> <string name="group_invitations">Group invitations</string> <string name="gallery_invitations">Gallery invitations</string> <string name="circle_invitations">Circle invitations</string>