From 1fdb851845ec316074a157c9111b43330a7eec6d Mon Sep 17 00:00:00 2001 From: Valere Date: Thu, 16 Dec 2021 10:12:31 +0100 Subject: [PATCH] open room profile for admin when clicked on notification area for e2e pb --- .../vector/app/core/ui/views/NotificationAreaView.kt | 5 +++++ .../app/features/home/room/detail/RoomDetailAction.kt | 1 + .../features/home/room/detail/RoomDetailFragment.kt | 11 ++++++++--- .../features/home/room/detail/RoomDetailViewEvents.kt | 1 + .../features/home/room/detail/RoomDetailViewModel.kt | 11 ++++++++++- .../features/home/room/detail/RoomDetailViewState.kt | 1 + 6 files changed, 26 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/ui/views/NotificationAreaView.kt b/vector/src/main/java/im/vector/app/core/ui/views/NotificationAreaView.kt index 661f0fd5e8..f8cc334300 100644 --- a/vector/src/main/java/im/vector/app/core/ui/views/NotificationAreaView.kt +++ b/vector/src/main/java/im/vector/app/core/ui/views/NotificationAreaView.kt @@ -25,6 +25,7 @@ import android.widget.LinearLayout import androidx.core.content.ContextCompat import androidx.core.text.italic import im.vector.app.R +import im.vector.app.core.epoxy.onClick import im.vector.app.core.error.ResourceLimitErrorFormatter import im.vector.app.core.extensions.exhaustive import im.vector.app.core.utils.DimensionConverter @@ -115,6 +116,9 @@ class NotificationAreaView @JvmOverloads constructor( +resources.getString(R.string.room_unsupported_e2e_algorithm) } } + views.roomNotificationMessage.onClick { + delegate?.onMisconfiguredEncryptionClicked() + } views.roomNotificationMessage.text = message views.roomNotificationMessage.setTextColor(ThemeUtils.getColor(context, R.attr.vctr_content_secondary)) } @@ -193,5 +197,6 @@ class NotificationAreaView @JvmOverloads constructor( */ interface Delegate { fun onTombstoneEventClicked() + fun onMisconfiguredEncryptionClicked() } } 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 f20a32848c..f866bb328d 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 @@ -42,6 +42,7 @@ sealed class RoomDetailAction : VectorViewModelAction { object MarkAllAsRead : RoomDetailAction() data class DownloadOrOpen(val eventId: String, val senderId: String?, val messageFileContent: MessageWithAttachmentContent) : RoomDetailAction() object JoinAndOpenReplacementRoom : RoomDetailAction() + object OnClickMisconfiguredEncryption : RoomDetailAction() object AcceptInvite : RoomDetailAction() object RejectInvite : RoomDetailAction() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 19ed0256d9..3f3ac1df2f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -461,7 +461,8 @@ class RoomDetailFragment @Inject constructor( is RoomDetailViewEvents.OpenRoom -> handleOpenRoom(it) RoomDetailViewEvents.OpenInvitePeople -> navigator.openInviteUsersToRoom(requireContext(), roomDetailArgs.roomId) RoomDetailViewEvents.OpenSetRoomAvatarDialog -> galleryOrCameraDialogHelper.show() - RoomDetailViewEvents.OpenRoomSettings -> handleOpenRoomSettings() + RoomDetailViewEvents.OpenRoomSettings -> handleOpenRoomSettings(RoomProfileActivity.EXTRA_DIRECT_ACCESS_ROOM_SETTINGS) + RoomDetailViewEvents.OpenRoomProfile -> handleOpenRoomSettings() is RoomDetailViewEvents.ShowRoomAvatarFullScreen -> it.matrixItem?.let { item -> navigator.openBigImageViewer(requireActivity(), it.view, item) } @@ -585,11 +586,11 @@ class RoomDetailFragment @Inject constructor( ) } - private fun handleOpenRoomSettings() { + private fun handleOpenRoomSettings(directAccess: Int? = null) { navigator.openRoomProfile( requireContext(), roomDetailArgs.roomId, - RoomProfileActivity.EXTRA_DIRECT_ACCESS_ROOM_SETTINGS + directAccess ) } @@ -949,6 +950,10 @@ class RoomDetailFragment @Inject constructor( override fun onTombstoneEventClicked() { roomDetailViewModel.handle(RoomDetailAction.JoinAndOpenReplacementRoom) } + + override fun onMisconfiguredEncryptionClicked() { + roomDetailViewModel.handle(RoomDetailAction.OnClickMisconfiguredEncryption) + } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt index 2e7f2bfd63..86240a5ffe 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewEvents.kt @@ -48,6 +48,7 @@ sealed class RoomDetailViewEvents : VectorViewEvents { object OpenInvitePeople : RoomDetailViewEvents() object OpenSetRoomAvatarDialog : RoomDetailViewEvents() object OpenRoomSettings : RoomDetailViewEvents() + object OpenRoomProfile : RoomDetailViewEvents() data class ShowRoomAvatarFullScreen(val matrixItem: MatrixItem?, val view: View?) : RoomDetailViewEvents() object ShowWaitingView : RoomDetailViewEvents() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 583810b915..aba636309f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -211,11 +211,13 @@ class RoomDetailViewModel @AssistedInject constructor( val canInvite = PowerLevelsHelper(it).isUserAbleToInvite(session.myUserId) val isAllowedToManageWidgets = session.widgetService().hasPermissionsToHandleWidgets(room.roomId) val isAllowedToStartWebRTCCall = PowerLevelsHelper(it).isUserAllowedToSend(session.myUserId, false, EventType.CALL_INVITE) + val isAllowedToSetupEncryption = PowerLevelsHelper(it).isUserAllowedToSend(session.myUserId, true, EventType.STATE_ROOM_ENCRYPTION) setState { copy( canInvite = canInvite, isAllowedToManageWidgets = isAllowedToManageWidgets, - isAllowedToStartWebRTCCall = isAllowedToStartWebRTCCall + isAllowedToStartWebRTCCall = isAllowedToStartWebRTCCall, + isAllowedToSetupEncryption = isAllowedToSetupEncryption ) } }.launchIn(viewModelScope) @@ -309,6 +311,7 @@ class RoomDetailViewModel @AssistedInject constructor( is RoomDetailAction.DownloadOrOpen -> handleOpenOrDownloadFile(action) is RoomDetailAction.NavigateToEvent -> handleNavigateToEvent(action) is RoomDetailAction.JoinAndOpenReplacementRoom -> handleJoinAndOpenReplacementRoom() + is RoomDetailAction.OnClickMisconfiguredEncryption -> handleClickMisconfiguredE2E() is RoomDetailAction.ResendMessage -> handleResendEvent(action) is RoomDetailAction.RemoveFailedEcho -> handleRemove(action) is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead() @@ -614,6 +617,12 @@ class RoomDetailViewModel @AssistedInject constructor( } } + private fun handleClickMisconfiguredE2E() = withState { state -> + if (state.isAllowedToSetupEncryption) { + _viewEvents.post(RoomDetailViewEvents.OpenRoomProfile) + } + } + private fun isIntegrationEnabled() = session.integrationManagerService().isIntegrationEnabled() fun isMenuItemVisible(@IdRes itemId: Int): Boolean = com.airbnb.mvrx.withState(this) { state -> diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt index 042a415b47..e35d601887 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt @@ -64,6 +64,7 @@ data class RoomDetailViewState( val canInvite: Boolean = true, val isAllowedToManageWidgets: Boolean = false, val isAllowedToStartWebRTCCall: Boolean = true, + val isAllowedToSetupEncryption: Boolean = true, val hasFailedSending: Boolean = false, val jitsiState: JitsiState = JitsiState() ) : MavericksState {