From 49596dcea3edc9b52cffca078b231308bc75d82e Mon Sep 17 00:00:00 2001 From: Maxime Naturel Date: Mon, 14 Feb 2022 15:57:23 +0100 Subject: [PATCH] Mocking check of permission to notify room --- .../session/room/model/PowerLevelsContent.kt | 1 - .../member/AutocompleteMemberController.kt | 1 - .../member/AutocompleteMemberPresenter.kt | 86 ++++++++++++------- 3 files changed, 55 insertions(+), 33 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt index 371fb922e6..5c46db7166 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt @@ -100,7 +100,6 @@ data class PowerLevelsContent( } } - // TODO use this to check if user can notify everyone => compare user role to room permission setting companion object { /** * Key to use for content.notifications and get the level required to trigger an @room notification. Defaults to 50 if unspecified. diff --git a/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberController.kt b/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberController.kt index 04bcbd7f01..2034cee90a 100644 --- a/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberController.kt +++ b/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberController.kt @@ -84,7 +84,6 @@ class AutocompleteMemberController @Inject constructor(private val context: Cont private fun buildEveryoneItem(everyone: AutocompleteMemberItem.Everyone) { val host = this - autocompleteMatrixItem { everyone.roomSummary.let { room -> id(room.roomId) diff --git a/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberPresenter.kt b/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberPresenter.kt index 73e5bfe7b9..476c7d850c 100644 --- a/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberPresenter.kt +++ b/vector/src/main/java/im/vector/app/features/autocomplete/member/AutocompleteMemberPresenter.kt @@ -26,6 +26,7 @@ import im.vector.app.features.autocomplete.AutocompleteClickListener import im.vector.app.features.autocomplete.RecyclerViewPresenter import org.matrix.android.sdk.api.query.QueryStringValue import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.room.members.RoomMemberQueryParams import org.matrix.android.sdk.api.session.room.members.roomMemberQueryParams import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary @@ -77,33 +78,10 @@ class AutocompleteMemberPresenter @AssistedInject constructor(context: Context, } override fun onQuery(query: CharSequence?) { - val queryParams = roomMemberQueryParams { - displayName = if (query.isNullOrBlank()) { - QueryStringValue.IsNotEmpty - } else { - QueryStringValue.Contains(query.toString(), QueryStringValue.Case.INSENSITIVE) - } - memberships = listOf(Membership.JOIN) - excludeSelf = true - } - - val membersHeader = AutocompleteMemberItem.Header( - ID_HEADER_MEMBERS, - context.getString(R.string.room_message_autocomplete_users) - ) - val members = room.getRoomMembers(queryParams) - .asSequence() - .sortedBy { it.displayName } - .disambiguate() - .map { AutocompleteMemberItem.RoomMember(it) } - .toList() - - // TODO check if user can notify everyone => compare user role to room permission setting: PowerLevelsContent - val everyone = room.roomSummary() - ?.takeIf { query.isNullOrBlank() || MatrixItem.NOTIFY_EVERYONE.startsWith("@$query") } - ?.let { - AutocompleteMemberItem.Everyone(it) - } + val queryParams = createQueryParams(query) + val membersHeader = createMembersHeader() + val members = createMemberItems(queryParams) + val everyone = createEveryoneItem(query) val items = mutableListOf().apply { if (members.isNotEmpty()) { @@ -111,10 +89,7 @@ class AutocompleteMemberPresenter @AssistedInject constructor(context: Context, addAll(members) } everyone?.let { - val everyoneHeader = AutocompleteMemberItem.Header( - ID_HEADER_EVERYONE, - context.getString(R.string.room_message_autocomplete_notification) - ) + val everyoneHeader = createEveryoneHeader() add(everyoneHeader) add(it) } @@ -123,6 +98,55 @@ class AutocompleteMemberPresenter @AssistedInject constructor(context: Context, controller.setData(items) } + /* ========================================================================================== + * Helper methods + * ========================================================================================== */ + + private fun createQueryParams(query: CharSequence?) = roomMemberQueryParams { + displayName = if (query.isNullOrBlank()) { + QueryStringValue.IsNotEmpty + } else { + QueryStringValue.Contains(query.toString(), QueryStringValue.Case.INSENSITIVE) + } + memberships = listOf(Membership.JOIN) + excludeSelf = true + } + + private fun createMembersHeader() = + AutocompleteMemberItem.Header( + ID_HEADER_MEMBERS, + context.getString(R.string.room_message_autocomplete_users) + ) + + private fun createMemberItems(queryParams: RoomMemberQueryParams) = + room.getRoomMembers(queryParams) + .asSequence() + .sortedBy { it.displayName } + .disambiguate() + .map { AutocompleteMemberItem.RoomMember(it) } + .toList() + + private fun createEveryoneHeader() = + AutocompleteMemberItem.Header( + ID_HEADER_EVERYONE, + context.getString(R.string.room_message_autocomplete_notification) + ) + + private fun createEveryoneItem(query: CharSequence?) = + room.roomSummary() + ?.takeIf { canNotifyEveryone() } + ?.takeIf { query.isNullOrBlank() || MatrixItem.NOTIFY_EVERYONE.startsWith("@$query") } + ?.let { + AutocompleteMemberItem.Everyone(it) + } + + private fun canNotifyEveryone() = true + // TODO use session object to check ? + /*conditionResolver.resolveSenderNotificationPermissionCondition( + Event(roomId = roomId), + SenderNotificationPermissionCondition(PowerLevelsContent.NOTIFICATIONS_ROOM_KEY) + )*/ + /* ========================================================================================== * Const * ========================================================================================== */