From 1ef26e6c12503e9cc826db02dcbe37437f56d5fd Mon Sep 17 00:00:00 2001 From: Maxime Naturel Date: Mon, 21 Feb 2022 10:49:53 +0100 Subject: [PATCH 1/4] Adding changelog entry --- changelog.d/4319.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/4319.bugfix diff --git a/changelog.d/4319.bugfix b/changelog.d/4319.bugfix new file mode 100644 index 0000000000..da42c864c6 --- /dev/null +++ b/changelog.d/4319.bugfix @@ -0,0 +1 @@ +Open direct message screen when clicking on DM button in the space members list From 836bf4e11e69ff28dd5ef04a760e8b35031e6a01 Mon Sep 17 00:00:00 2001 From: Maxime Naturel Date: Mon, 21 Feb 2022 14:18:35 +0100 Subject: [PATCH 2/4] DRAFT TODO --- .../im/vector/app/features/home/room/detail/TimelineFragment.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index 1a40018526..ede642a95e 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -1234,6 +1234,7 @@ class TimelineFragment @Inject constructor( override fun onResume() { super.onResume() notificationDrawerManager.setCurrentRoom(timelineArgs.roomId) + // TODO should we handle it in HomeActivity as well? => see how we open dm from create Message button roomDetailPendingActionStore.data?.let { handlePendingAction(it) } roomDetailPendingActionStore.data = null From 46854b4b845adcad97cab48a8e4c284ae2236d46 Mon Sep 17 00:00:00 2001 From: Maxime Naturel Date: Mon, 21 Feb 2022 18:00:21 +0100 Subject: [PATCH 3/4] Moving DM creation/opening into the member profile screen --- .../RoomMemberProfileAction.kt | 1 + .../RoomMemberProfileFragment.kt | 8 ++++++-- .../RoomMemberProfileViewEvents.kt | 1 + .../RoomMemberProfileViewModel.kt | 18 ++++++++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileAction.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileAction.kt index 87801a7e95..e2298d9b53 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileAction.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileAction.kt @@ -29,4 +29,5 @@ sealed class RoomMemberProfileAction : VectorViewModelAction { object ShareRoomMemberProfile : RoomMemberProfileAction() data class SetPowerLevel(val previousValue: Int, val newValue: Int, val askForValidation: Boolean) : RoomMemberProfileAction() data class SetUserColorOverride(val newColorSpec: String) : RoomMemberProfileAction() + data class OpenOrCreateDm(val userId: String) : RoomMemberProfileAction() } diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt index fcebe9adbb..7e919fb663 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt @@ -127,6 +127,7 @@ class RoomMemberProfileFragment @Inject constructor( is RoomMemberProfileViewEvents.ShareRoomMemberProfile -> handleShareRoomMemberProfile(it.permalink) is RoomMemberProfileViewEvents.ShowPowerLevelValidation -> handleShowPowerLevelAdminWarning(it) is RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning -> handleShowPowerLevelDemoteWarning(it) + is RoomMemberProfileViewEvents.OpenRoom -> handleOpenRoom(it) is RoomMemberProfileViewEvents.OnKickActionSuccess -> Unit is RoomMemberProfileViewEvents.OnSetPowerLevelSuccess -> Unit is RoomMemberProfileViewEvents.OnBanActionSuccess -> Unit @@ -142,6 +143,10 @@ class RoomMemberProfileFragment @Inject constructor( headerViews.memberProfileIdView.copyOnLongClick() } + private fun handleOpenRoom(event: RoomMemberProfileViewEvents.OpenRoom) { + navigator.openRoom(requireContext(), event.roomId, null) + } + private fun handleShowPowerLevelDemoteWarning(event: RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning) { EditPowerLevelDialogs.showDemoteWarning(requireActivity()) { viewModel.handle(RoomMemberProfileAction.SetPowerLevel(event.currentValue, event.newValue, false)) @@ -297,8 +302,7 @@ class RoomMemberProfileFragment @Inject constructor( } override fun onOpenDmClicked() { - roomDetailPendingActionStore.data = RoomDetailPendingAction.OpenOrCreateDm(fragmentArgs.userId) - vectorBaseActivity.finish() + viewModel.handle(RoomMemberProfileAction.OpenOrCreateDm(fragmentArgs.userId)) } override fun onJumpToReadReceiptClicked() { diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewEvents.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewEvents.kt index 9981d72e07..efe23eeff0 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewEvents.kt @@ -39,4 +39,5 @@ sealed class RoomMemberProfileViewEvents : VectorViewEvents { ) : RoomMemberProfileViewEvents() data class ShareRoomMemberProfile(val permalink: String) : RoomMemberProfileViewEvents() + data class OpenRoom(val roomId: String) : RoomMemberProfileViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt index c219c85185..a79a9f4c1d 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt @@ -32,6 +32,7 @@ import im.vector.app.core.extensions.exhaustive import im.vector.app.core.mvrx.runCatchingToAsync import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.resources.StringProvider +import im.vector.app.features.createdirect.DirectRoomHelper import im.vector.app.features.displayname.getBestName import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider import im.vector.app.features.powerlevel.PowerLevelsFlowFactory @@ -66,6 +67,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor( @Assisted private val initialState: RoomMemberProfileViewState, private val stringProvider: StringProvider, private val matrixItemColorProvider: MatrixItemColorProvider, + private val directRoomHelper: DirectRoomHelper, private val session: Session ) : VectorViewModel(initialState) { @@ -167,9 +169,25 @@ class RoomMemberProfileViewModel @AssistedInject constructor( is RoomMemberProfileAction.KickUser -> handleKickAction(action) RoomMemberProfileAction.InviteUser -> handleInviteAction() is RoomMemberProfileAction.SetUserColorOverride -> handleSetUserColorOverride(action) + is RoomMemberProfileAction.OpenOrCreateDm -> handleOpenOrCreateDm(action) }.exhaustive } + private fun handleOpenOrCreateDm(action: RoomMemberProfileAction.OpenOrCreateDm) { + viewModelScope.launch { + _viewEvents.post(RoomMemberProfileViewEvents.Loading()) + val roomId = try { + directRoomHelper.ensureDMExists(action.userId) + } catch (failure: Throwable) { + _viewEvents.post(RoomMemberProfileViewEvents.Failure(failure)) + return@launch + } + if (roomId != initialState.roomId) { + _viewEvents.post(RoomMemberProfileViewEvents.OpenRoom(roomId = roomId)) + } + } + } + private fun handleSetUserColorOverride(action: RoomMemberProfileAction.SetUserColorOverride) { val newOverrideColorSpecs = session.accountDataService() .getUserAccountDataEvent(UserAccountDataTypes.TYPE_OVERRIDE_COLORS) From 96f041a773e660ed5e50962d99e85857c68e1951 Mon Sep 17 00:00:00 2001 From: Maxime Naturel Date: Tue, 22 Feb 2022 09:50:23 +0100 Subject: [PATCH 4/4] Remove handling of direct message from timeline fragment --- .../home/room/detail/RoomDetailAction.kt | 1 - .../home/room/detail/RoomDetailPendingAction.kt | 1 - .../home/room/detail/TimelineFragment.kt | 3 --- .../home/room/detail/TimelineViewModel.kt | 17 +---------------- 4 files changed, 1 insertion(+), 21 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt index 14c8e598f8..d10b363519 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt @@ -92,7 +92,6 @@ sealed class RoomDetailAction : VectorViewModelAction { data class UpdateJoinJitsiCallStatus(val conferenceEvent: ConferenceEvent) : RoomDetailAction() - data class OpenOrCreateDm(val userId: String) : RoomDetailAction() data class JumpToReadReceipt(val userId: String) : RoomDetailAction() object QuickActionInvitePeople : RoomDetailAction() object QuickActionSetAvatar : RoomDetailAction() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt index fccab500c5..b42f551ba0 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt @@ -17,7 +17,6 @@ package im.vector.app.features.home.room.detail sealed class RoomDetailPendingAction { - data class OpenOrCreateDm(val userId: String) : RoomDetailPendingAction() data class JumpToReadReceipt(val userId: String) : RoomDetailPendingAction() data class MentionUser(val userId: String) : RoomDetailPendingAction() data class OpenRoom(val roomId: String, val closeCurrentRoom: Boolean = false) : RoomDetailPendingAction() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt index ede642a95e..501b6c9078 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineFragment.kt @@ -1234,7 +1234,6 @@ class TimelineFragment @Inject constructor( override fun onResume() { super.onResume() notificationDrawerManager.setCurrentRoom(timelineArgs.roomId) - // TODO should we handle it in HomeActivity as well? => see how we open dm from create Message button roomDetailPendingActionStore.data?.let { handlePendingAction(it) } roomDetailPendingActionStore.data = null @@ -1248,8 +1247,6 @@ class TimelineFragment @Inject constructor( timelineViewModel.handle(RoomDetailAction.JumpToReadReceipt(roomDetailPendingAction.userId)) is RoomDetailPendingAction.MentionUser -> insertUserDisplayNameInTextEditor(roomDetailPendingAction.userId) - is RoomDetailPendingAction.OpenOrCreateDm -> - timelineViewModel.handle(RoomDetailAction.OpenOrCreateDm(roomDetailPendingAction.userId)) is RoomDetailPendingAction.OpenRoom -> handleOpenRoom(RoomDetailViewEvents.OpenRoom(roomDetailPendingAction.roomId, roomDetailPendingAction.closeCurrentRoom)) }.exhaustive diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt index 14f5df9055..79199203eb 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/TimelineViewModel.kt @@ -417,7 +417,6 @@ class TimelineViewModel @AssistedInject constructor( is RoomDetailAction.RemoveWidget -> handleDeleteWidget(action.widgetId) is RoomDetailAction.EnsureNativeWidgetAllowed -> handleCheckWidgetAllowed(action) is RoomDetailAction.CancelSend -> handleCancel(action) - is RoomDetailAction.OpenOrCreateDm -> handleOpenOrCreateDm(action) is RoomDetailAction.JumpToReadReceipt -> handleJumpToReadReceipt(action) RoomDetailAction.QuickActionInvitePeople -> handleInvitePeople() RoomDetailAction.QuickActionSetAvatar -> handleQuickSetAvatar() @@ -497,20 +496,6 @@ class TimelineViewModel @AssistedInject constructor( _viewEvents.post(RoomDetailViewEvents.OpenSetRoomAvatarDialog) } - private fun handleOpenOrCreateDm(action: RoomDetailAction.OpenOrCreateDm) { - viewModelScope.launch { - val roomId = try { - directRoomHelper.ensureDMExists(action.userId) - } catch (failure: Throwable) { - _viewEvents.post(RoomDetailViewEvents.ActionFailure(action, failure)) - return@launch - } - if (roomId != initialState.roomId) { - _viewEvents.post(RoomDetailViewEvents.OpenRoom(roomId = roomId)) - } - } - } - private fun handleJumpToReadReceipt(action: RoomDetailAction.JumpToReadReceipt) { room.getUserReadReceipt(action.userId) ?.let { handleNavigateToEvent(RoomDetailAction.NavigateToEvent(it, true)) } @@ -810,7 +795,7 @@ class TimelineViewModel @AssistedInject constructor( notificationDrawerManager.updateEvents { it.clearMemberShipNotificationForRoom(initialState.roomId) } viewModelScope.launch { try { - session.leaveRoom(room.roomId) + session.leaveRoom(room.roomId) } catch (throwable: Throwable) { _viewEvents.post(RoomDetailViewEvents.Failure(throwable, showInDialog = true)) }