From 195fb6f6fce0c1e199ae6a9528bc4837faab31d8 Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 22 Sep 2021 14:53:01 +0200 Subject: [PATCH 1/4] Improve invite bottom sheet --- .../invite/SpaceInviteBottomSheetViewModel.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) 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..dff34cc58e3 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,10 @@ 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.peeking.PeekResult class SpaceInviteBottomSheetViewModel @AssistedInject constructor( @Assisted private val initialState: SpaceInviteBottomSheetState, @@ -57,6 +61,37 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor( peopleYouKnow = Success(peopleYouKnow) ) } + + if (roomSummary.membership == Membership.INVITE) { + // we can try to query the room summary api to get more info? + viewModelScope.launch { + tryOrNull { session.peekRoom(roomSummary.roomId) }?.let { peekResult -> + when (peekResult) { + is PeekResult.Success -> { + 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? + ) + ) + ) + } + } + else -> { + // + } + } + } + } + } } } From 9b02704d5b717dfad17fe1970c8b1e178022aa66 Mon Sep 17 00:00:00 2001 From: Valere Date: Thu, 23 Sep 2021 09:52:20 +0200 Subject: [PATCH 2/4] Code review --- .../invite/SpaceInviteBottomSheetViewModel.kt | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) 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 dff34cc58e3..91ce819b9d6 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 @@ -36,6 +36,7 @@ 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( @@ -46,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) } @@ -61,35 +61,36 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor( peopleYouKnow = Success(peopleYouKnow) ) } + refreshInviteSummaryIfNeeded(roomSummary) + } + } - if (roomSummary.membership == Membership.INVITE) { - // we can try to query the room summary api to get more info? - viewModelScope.launch { - tryOrNull { session.peekRoom(roomSummary.roomId) }?.let { peekResult -> - when (peekResult) { - is PeekResult.Success -> { - 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? - ) + private fun refreshInviteSummaryIfNeeded(roomSummary: RoomSummary) { + if (roomSummary.membership == Membership.INVITE) { + // we can try to query the room summary api to get more info? + viewModelScope.launch(Dispatchers.IO) { + when (val peekResult = tryOrNull { session.peekRoom(roomSummary.roomId) }) { + is PeekResult.Success -> { + 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? ) ) - } - } - else -> { - // - } + ) } } + else -> { + // nop + } } } } From 3287980109860f51b740564079a4fa41364fe672 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 24 Sep 2021 15:38:08 +0200 Subject: [PATCH 3/4] Cleanup and add changelog --- changelog.d/4057.feature | 1 + .../invite/SpaceInviteBottomSheetViewModel.kt | 53 +++++++++---------- 2 files changed, 26 insertions(+), 28 deletions(-) create mode 100644 changelog.d/4057.feature 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 91ce819b9d6..94a73b06d42 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 @@ -61,38 +61,35 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor( peopleYouKnow = Success(peopleYouKnow) ) } - refreshInviteSummaryIfNeeded(roomSummary) + if (roomSummary.membership == Membership.INVITE) { + getLatestRoomSummary(roomSummary) + } } } - private fun refreshInviteSummaryIfNeeded(roomSummary: RoomSummary) { - if (roomSummary.membership == Membership.INVITE) { - // we can try to query the room summary api to get more info? - viewModelScope.launch(Dispatchers.IO) { - when (val peekResult = tryOrNull { session.peekRoom(roomSummary.roomId) }) { - is PeekResult.Success -> { - 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? - ) - ) - ) - } - } - else -> { - // nop - } - } + /** + * 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? + ) + ) + ) } + } } From eb104d8758df0a0da847d250f839edfbb2507eda Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 24 Sep 2021 20:45:50 +0200 Subject: [PATCH 4/4] Clean up --- .../features/spaces/invite/SpaceInviteBottomSheetViewModel.kt | 1 - 1 file changed, 1 deletion(-) 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 94a73b06d42..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 @@ -89,7 +89,6 @@ class SpaceInviteBottomSheetViewModel @AssistedInject constructor( ) ) } - } }