diff --git a/changelog.d/4057.feature b/changelog.d/4057.feature new file mode 100644 index 00000000000..207e130268b --- /dev/null +++ b/changelog.d/4057.feature @@ -0,0 +1 @@ +Improve space invite bottom sheet \ No newline at end of file diff --git a/vector/src/main/java/im/vector/app/features/spaces/invite/SpaceInviteBottomSheetViewModel.kt b/vector/src/main/java/im/vector/app/features/spaces/invite/SpaceInviteBottomSheetViewModel.kt index 4524b57004d..55b265f2443 100644 --- a/vector/src/main/java/im/vector/app/features/spaces/invite/SpaceInviteBottomSheetViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/spaces/invite/SpaceInviteBottomSheetViewModel.kt @@ -16,6 +16,7 @@ package im.vector.app.features.spaces.invite +import androidx.lifecycle.viewModelScope import com.airbnb.mvrx.ActivityViewModelContext import com.airbnb.mvrx.Fail import com.airbnb.mvrx.FragmentViewModelContext @@ -32,7 +33,11 @@ import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.session.coroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.session.Session +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.peeking.PeekResult class SpaceInviteBottomSheetViewModel @AssistedInject constructor( @Assisted private val initialState: SpaceInviteBottomSheetState, @@ -42,7 +47,6 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor( init { session.getRoomSummary(initialState.spaceId)?.let { roomSummary -> - val knownMembers = roomSummary.otherMemberIds.filter { session.getExistingDirectRoomWithUser(it) != null }.mapNotNull { session.getUser(it) } @@ -57,6 +61,34 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor( peopleYouKnow = Success(peopleYouKnow) ) } + if (roomSummary.membership == Membership.INVITE) { + getLatestRoomSummary(roomSummary) + } + } + } + + /** + * Try to request the room summary api to get more info + */ + private fun getLatestRoomSummary(roomSummary: RoomSummary) { + viewModelScope.launch(Dispatchers.IO) { + val peekResult = tryOrNull { session.peekRoom(roomSummary.roomId) } as? PeekResult.Success ?: return@launch + setState { + copy( + summary = Success( + roomSummary.copy( + joinedMembersCount = peekResult.numJoinedMembers, + // it's also possible that the name/avatar did change since the invite.. + // if it's null keep the old one as summary API might not be available + // and peek result could be null for other reasons (not peekable) + avatarUrl = peekResult.avatarUrl ?: roomSummary.avatarUrl, + displayName = peekResult.name ?: roomSummary.displayName, + topic = peekResult.topic ?: roomSummary.topic + // maybe use someMembers field later? + ) + ) + ) + } } }