Merge pull request #5292 from vector-im/feature/mna/4319-dm-space-members-list
#4319: Fix DM navigation in member profile screen
This commit is contained in:
commit
781a477056
1
changelog.d/4319.bugfix
Normal file
1
changelog.d/4319.bugfix
Normal file
@ -0,0 +1 @@
|
|||||||
|
Open direct message screen when clicking on DM button in the space members list
|
@ -92,7 +92,6 @@ sealed class RoomDetailAction : VectorViewModelAction {
|
|||||||
|
|
||||||
data class UpdateJoinJitsiCallStatus(val conferenceEvent: ConferenceEvent) : RoomDetailAction()
|
data class UpdateJoinJitsiCallStatus(val conferenceEvent: ConferenceEvent) : RoomDetailAction()
|
||||||
|
|
||||||
data class OpenOrCreateDm(val userId: String) : RoomDetailAction()
|
|
||||||
data class JumpToReadReceipt(val userId: String) : RoomDetailAction()
|
data class JumpToReadReceipt(val userId: String) : RoomDetailAction()
|
||||||
object QuickActionInvitePeople : RoomDetailAction()
|
object QuickActionInvitePeople : RoomDetailAction()
|
||||||
object QuickActionSetAvatar : RoomDetailAction()
|
object QuickActionSetAvatar : RoomDetailAction()
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
package im.vector.app.features.home.room.detail
|
package im.vector.app.features.home.room.detail
|
||||||
|
|
||||||
sealed class RoomDetailPendingAction {
|
sealed class RoomDetailPendingAction {
|
||||||
data class OpenOrCreateDm(val userId: String) : RoomDetailPendingAction()
|
|
||||||
data class JumpToReadReceipt(val userId: String) : RoomDetailPendingAction()
|
data class JumpToReadReceipt(val userId: String) : RoomDetailPendingAction()
|
||||||
data class MentionUser(val userId: String) : RoomDetailPendingAction()
|
data class MentionUser(val userId: String) : RoomDetailPendingAction()
|
||||||
data class OpenRoom(val roomId: String, val closeCurrentRoom: Boolean = false) : RoomDetailPendingAction()
|
data class OpenRoom(val roomId: String, val closeCurrentRoom: Boolean = false) : RoomDetailPendingAction()
|
||||||
|
@ -1247,8 +1247,6 @@ class TimelineFragment @Inject constructor(
|
|||||||
timelineViewModel.handle(RoomDetailAction.JumpToReadReceipt(roomDetailPendingAction.userId))
|
timelineViewModel.handle(RoomDetailAction.JumpToReadReceipt(roomDetailPendingAction.userId))
|
||||||
is RoomDetailPendingAction.MentionUser ->
|
is RoomDetailPendingAction.MentionUser ->
|
||||||
insertUserDisplayNameInTextEditor(roomDetailPendingAction.userId)
|
insertUserDisplayNameInTextEditor(roomDetailPendingAction.userId)
|
||||||
is RoomDetailPendingAction.OpenOrCreateDm ->
|
|
||||||
timelineViewModel.handle(RoomDetailAction.OpenOrCreateDm(roomDetailPendingAction.userId))
|
|
||||||
is RoomDetailPendingAction.OpenRoom ->
|
is RoomDetailPendingAction.OpenRoom ->
|
||||||
handleOpenRoom(RoomDetailViewEvents.OpenRoom(roomDetailPendingAction.roomId, roomDetailPendingAction.closeCurrentRoom))
|
handleOpenRoom(RoomDetailViewEvents.OpenRoom(roomDetailPendingAction.roomId, roomDetailPendingAction.closeCurrentRoom))
|
||||||
}.exhaustive
|
}.exhaustive
|
||||||
|
@ -417,7 +417,6 @@ class TimelineViewModel @AssistedInject constructor(
|
|||||||
is RoomDetailAction.RemoveWidget -> handleDeleteWidget(action.widgetId)
|
is RoomDetailAction.RemoveWidget -> handleDeleteWidget(action.widgetId)
|
||||||
is RoomDetailAction.EnsureNativeWidgetAllowed -> handleCheckWidgetAllowed(action)
|
is RoomDetailAction.EnsureNativeWidgetAllowed -> handleCheckWidgetAllowed(action)
|
||||||
is RoomDetailAction.CancelSend -> handleCancel(action)
|
is RoomDetailAction.CancelSend -> handleCancel(action)
|
||||||
is RoomDetailAction.OpenOrCreateDm -> handleOpenOrCreateDm(action)
|
|
||||||
is RoomDetailAction.JumpToReadReceipt -> handleJumpToReadReceipt(action)
|
is RoomDetailAction.JumpToReadReceipt -> handleJumpToReadReceipt(action)
|
||||||
RoomDetailAction.QuickActionInvitePeople -> handleInvitePeople()
|
RoomDetailAction.QuickActionInvitePeople -> handleInvitePeople()
|
||||||
RoomDetailAction.QuickActionSetAvatar -> handleQuickSetAvatar()
|
RoomDetailAction.QuickActionSetAvatar -> handleQuickSetAvatar()
|
||||||
@ -497,20 +496,6 @@ class TimelineViewModel @AssistedInject constructor(
|
|||||||
_viewEvents.post(RoomDetailViewEvents.OpenSetRoomAvatarDialog)
|
_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) {
|
private fun handleJumpToReadReceipt(action: RoomDetailAction.JumpToReadReceipt) {
|
||||||
room.getUserReadReceipt(action.userId)
|
room.getUserReadReceipt(action.userId)
|
||||||
?.let { handleNavigateToEvent(RoomDetailAction.NavigateToEvent(it, true)) }
|
?.let { handleNavigateToEvent(RoomDetailAction.NavigateToEvent(it, true)) }
|
||||||
|
@ -29,4 +29,5 @@ sealed class RoomMemberProfileAction : VectorViewModelAction {
|
|||||||
object ShareRoomMemberProfile : RoomMemberProfileAction()
|
object ShareRoomMemberProfile : RoomMemberProfileAction()
|
||||||
data class SetPowerLevel(val previousValue: Int, val newValue: Int, val askForValidation: Boolean) : RoomMemberProfileAction()
|
data class SetPowerLevel(val previousValue: Int, val newValue: Int, val askForValidation: Boolean) : RoomMemberProfileAction()
|
||||||
data class SetUserColorOverride(val newColorSpec: String) : RoomMemberProfileAction()
|
data class SetUserColorOverride(val newColorSpec: String) : RoomMemberProfileAction()
|
||||||
|
data class OpenOrCreateDm(val userId: String) : RoomMemberProfileAction()
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,7 @@ class RoomMemberProfileFragment @Inject constructor(
|
|||||||
is RoomMemberProfileViewEvents.ShareRoomMemberProfile -> handleShareRoomMemberProfile(it.permalink)
|
is RoomMemberProfileViewEvents.ShareRoomMemberProfile -> handleShareRoomMemberProfile(it.permalink)
|
||||||
is RoomMemberProfileViewEvents.ShowPowerLevelValidation -> handleShowPowerLevelAdminWarning(it)
|
is RoomMemberProfileViewEvents.ShowPowerLevelValidation -> handleShowPowerLevelAdminWarning(it)
|
||||||
is RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning -> handleShowPowerLevelDemoteWarning(it)
|
is RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning -> handleShowPowerLevelDemoteWarning(it)
|
||||||
|
is RoomMemberProfileViewEvents.OpenRoom -> handleOpenRoom(it)
|
||||||
is RoomMemberProfileViewEvents.OnKickActionSuccess -> Unit
|
is RoomMemberProfileViewEvents.OnKickActionSuccess -> Unit
|
||||||
is RoomMemberProfileViewEvents.OnSetPowerLevelSuccess -> Unit
|
is RoomMemberProfileViewEvents.OnSetPowerLevelSuccess -> Unit
|
||||||
is RoomMemberProfileViewEvents.OnBanActionSuccess -> Unit
|
is RoomMemberProfileViewEvents.OnBanActionSuccess -> Unit
|
||||||
@ -142,6 +143,10 @@ class RoomMemberProfileFragment @Inject constructor(
|
|||||||
headerViews.memberProfileIdView.copyOnLongClick()
|
headerViews.memberProfileIdView.copyOnLongClick()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleOpenRoom(event: RoomMemberProfileViewEvents.OpenRoom) {
|
||||||
|
navigator.openRoom(requireContext(), event.roomId, null)
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleShowPowerLevelDemoteWarning(event: RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning) {
|
private fun handleShowPowerLevelDemoteWarning(event: RoomMemberProfileViewEvents.ShowPowerLevelDemoteWarning) {
|
||||||
EditPowerLevelDialogs.showDemoteWarning(requireActivity()) {
|
EditPowerLevelDialogs.showDemoteWarning(requireActivity()) {
|
||||||
viewModel.handle(RoomMemberProfileAction.SetPowerLevel(event.currentValue, event.newValue, false))
|
viewModel.handle(RoomMemberProfileAction.SetPowerLevel(event.currentValue, event.newValue, false))
|
||||||
@ -297,8 +302,7 @@ class RoomMemberProfileFragment @Inject constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onOpenDmClicked() {
|
override fun onOpenDmClicked() {
|
||||||
roomDetailPendingActionStore.data = RoomDetailPendingAction.OpenOrCreateDm(fragmentArgs.userId)
|
viewModel.handle(RoomMemberProfileAction.OpenOrCreateDm(fragmentArgs.userId))
|
||||||
vectorBaseActivity.finish()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onJumpToReadReceiptClicked() {
|
override fun onJumpToReadReceiptClicked() {
|
||||||
|
@ -39,4 +39,5 @@ sealed class RoomMemberProfileViewEvents : VectorViewEvents {
|
|||||||
) : RoomMemberProfileViewEvents()
|
) : RoomMemberProfileViewEvents()
|
||||||
|
|
||||||
data class ShareRoomMemberProfile(val permalink: String) : RoomMemberProfileViewEvents()
|
data class ShareRoomMemberProfile(val permalink: String) : RoomMemberProfileViewEvents()
|
||||||
|
data class OpenRoom(val roomId: String) : RoomMemberProfileViewEvents()
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ import im.vector.app.core.extensions.exhaustive
|
|||||||
import im.vector.app.core.mvrx.runCatchingToAsync
|
import im.vector.app.core.mvrx.runCatchingToAsync
|
||||||
import im.vector.app.core.platform.VectorViewModel
|
import im.vector.app.core.platform.VectorViewModel
|
||||||
import im.vector.app.core.resources.StringProvider
|
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.displayname.getBestName
|
||||||
import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider
|
import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider
|
||||||
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
import im.vector.app.features.powerlevel.PowerLevelsFlowFactory
|
||||||
@ -66,6 +67,7 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
|
|||||||
@Assisted private val initialState: RoomMemberProfileViewState,
|
@Assisted private val initialState: RoomMemberProfileViewState,
|
||||||
private val stringProvider: StringProvider,
|
private val stringProvider: StringProvider,
|
||||||
private val matrixItemColorProvider: MatrixItemColorProvider,
|
private val matrixItemColorProvider: MatrixItemColorProvider,
|
||||||
|
private val directRoomHelper: DirectRoomHelper,
|
||||||
private val session: Session
|
private val session: Session
|
||||||
) : VectorViewModel<RoomMemberProfileViewState, RoomMemberProfileAction, RoomMemberProfileViewEvents>(initialState) {
|
) : VectorViewModel<RoomMemberProfileViewState, RoomMemberProfileAction, RoomMemberProfileViewEvents>(initialState) {
|
||||||
|
|
||||||
@ -167,9 +169,25 @@ class RoomMemberProfileViewModel @AssistedInject constructor(
|
|||||||
is RoomMemberProfileAction.KickUser -> handleKickAction(action)
|
is RoomMemberProfileAction.KickUser -> handleKickAction(action)
|
||||||
RoomMemberProfileAction.InviteUser -> handleInviteAction()
|
RoomMemberProfileAction.InviteUser -> handleInviteAction()
|
||||||
is RoomMemberProfileAction.SetUserColorOverride -> handleSetUserColorOverride(action)
|
is RoomMemberProfileAction.SetUserColorOverride -> handleSetUserColorOverride(action)
|
||||||
|
is RoomMemberProfileAction.OpenOrCreateDm -> handleOpenOrCreateDm(action)
|
||||||
}.exhaustive
|
}.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) {
|
private fun handleSetUserColorOverride(action: RoomMemberProfileAction.SetUserColorOverride) {
|
||||||
val newOverrideColorSpecs = session.accountDataService()
|
val newOverrideColorSpecs = session.accountDataService()
|
||||||
.getUserAccountDataEvent(UserAccountDataTypes.TYPE_OVERRIDE_COLORS)
|
.getUserAccountDataEvent(UserAccountDataTypes.TYPE_OVERRIDE_COLORS)
|
||||||
|
Loading…
Reference in New Issue
Block a user