From 2e33c2fcc90ff067332147a9f9c90c93ac9ea87c Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Thu, 13 Jun 2024 17:40:37 +0300 Subject: [PATCH] Update notification for gallery --- .../feature/circles/CirclesDataSource.kt | 4 +++- .../feature/groups/GroupsDataSource.kt | 3 ++- .../circles/mapping/RoomSummaryMapping.kt | 17 +------------- .../gallery/rooms/list/GalleryViewHolder.kt | 9 +++++--- .../core/mapping/RoomSummaryMapping.kt | 23 ++++++++++++++++--- .../circles/core/model/GalleryListItem.kt | 6 +++-- core/src/main/res/values/strings.xml | 1 - .../gallery/feature/PhotosDataSource.kt | 7 ++++-- 8 files changed, 41 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt b/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt index fb3885672..eff69942f 100644 --- a/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/circles/CirclesDataSource.kt @@ -47,7 +47,9 @@ class CirclesDataSource @Inject constructor( joinedCirclesWithTimelines.forEach { knocksCount += it.knockRequestsCount } val displayList = mutableListOf<CircleListItem>().apply { - if (invitesCount > 0) add(CircleInvitesNotificationListItem(invitesCount, knocksCount)) + if (invitesCount > 0 || knocksCount > 0) { + add(CircleInvitesNotificationListItem(invitesCount, knocksCount)) + } addAll(joinedCirclesWithTimelines) } return displayList diff --git a/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt b/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt index 8012e5df6..aa6b2d0c3 100644 --- a/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt +++ b/app/src/main/java/org/futo/circles/feature/groups/GroupsDataSource.kt @@ -34,8 +34,9 @@ class GroupsDataSource @Inject constructor() { joinedGroups.forEach { knocksCount += it.knockRequestsCount } return mutableListOf<GroupListItem>().apply { - if (invitesCount > 0 || knocksCount > 0) + if (invitesCount > 0 || knocksCount > 0) { add(GroupInvitesNotificationListItem(invitesCount, knocksCount)) + } addAll(joinedGroups) } diff --git a/app/src/main/java/org/futo/circles/mapping/RoomSummaryMapping.kt b/app/src/main/java/org/futo/circles/mapping/RoomSummaryMapping.kt index cf6d75c71..6d4f1b133 100644 --- a/app/src/main/java/org/futo/circles/mapping/RoomSummaryMapping.kt +++ b/app/src/main/java/org/futo/circles/mapping/RoomSummaryMapping.kt @@ -1,9 +1,8 @@ package org.futo.circles.mapping import org.futo.circles.core.extensions.getCircleAvatarUrl -import org.futo.circles.core.extensions.getPowerLevelContent import org.futo.circles.core.extensions.getRoomOwner -import org.futo.circles.core.extensions.isCurrentUserAbleToInvite +import org.futo.circles.core.mapping.getKnocksCount import org.futo.circles.core.mapping.nameOrId import org.futo.circles.core.model.RoomInfo import org.futo.circles.core.provider.MatrixSessionProvider @@ -11,10 +10,7 @@ import org.futo.circles.core.utils.getJoinedRoomById import org.futo.circles.core.utils.getTimelineRoomFor import org.futo.circles.model.JoinedCircleListItem import org.futo.circles.model.JoinedGroupListItem -import org.matrix.android.sdk.api.session.getRoom import org.matrix.android.sdk.api.session.getRoomSummary -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.RoomSummary @@ -64,14 +60,3 @@ private fun RoomSummary.getCircleUnreadMessagesCount(): Int { return unreadInCircle } -fun getKnocksCount(roomId: String): Int { - if (getPowerLevelContent(roomId)?.isCurrentUserAbleToInvite() == false) return 0 - return MatrixSessionProvider.currentSession?.getRoom(roomId)?.membershipService() - ?.getRoomMembers( - roomMemberQueryParams { - excludeSelf = true - memberships = listOf(Membership.KNOCK) - } - )?.size ?: 0 -} - diff --git a/core/src/main/java/org/futo/circles/core/feature/picker/gallery/rooms/list/GalleryViewHolder.kt b/core/src/main/java/org/futo/circles/core/feature/picker/gallery/rooms/list/GalleryViewHolder.kt index b5de996eb..662f47ca9 100644 --- a/core/src/main/java/org/futo/circles/core/feature/picker/gallery/rooms/list/GalleryViewHolder.kt +++ b/core/src/main/java/org/futo/circles/core/feature/picker/gallery/rooms/list/GalleryViewHolder.kt @@ -3,7 +3,6 @@ package org.futo.circles.core.feature.picker.gallery.rooms.list import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView -import org.futo.circles.core.R import org.futo.circles.core.base.list.ViewBindingHolder import org.futo.circles.core.base.list.context import org.futo.circles.core.databinding.ListItemInviteHeaderBinding @@ -19,6 +18,7 @@ import org.futo.circles.core.model.GalleryHeaderItem import org.futo.circles.core.model.GalleryInvitesNotificationListItem import org.futo.circles.core.model.GalleryListItem import org.futo.circles.core.model.JoinedGalleryListItem +import org.futo.circles.core.utils.TextFormatUtils abstract class GalleryViewHolder(view: View) : RecyclerView.ViewHolder(view) { @@ -73,8 +73,11 @@ class GalleryInviteNotificationViewHolder( override fun bind(data: GalleryListItem) { if (data !is GalleryInvitesNotificationListItem) return - binding.tvInvitesMessage.text = - context.getString(R.string.gallery_invites_notification_format, data.invitesCount) + binding.tvInvitesMessage.text = TextFormatUtils.getFormattedInvitesKnocksMessage( + context, + data.invitesCount, + data.knocksCount + ) } } diff --git a/core/src/main/java/org/futo/circles/core/mapping/RoomSummaryMapping.kt b/core/src/main/java/org/futo/circles/core/mapping/RoomSummaryMapping.kt index 166497ae6..5394b1218 100644 --- a/core/src/main/java/org/futo/circles/core/mapping/RoomSummaryMapping.kt +++ b/core/src/main/java/org/futo/circles/core/mapping/RoomSummaryMapping.kt @@ -1,14 +1,19 @@ package org.futo.circles.core.mapping import org.futo.circles.core.extensions.getCircleAvatarUrl +import org.futo.circles.core.extensions.getPowerLevelContent import org.futo.circles.core.extensions.getRoomOwner +import org.futo.circles.core.extensions.isCurrentUserAbleToInvite import org.futo.circles.core.extensions.notEmptyDisplayName -import org.futo.circles.core.model.CircleRoomTypeArg import org.futo.circles.core.model.JoinedGalleryListItem import org.futo.circles.core.model.RoomInfo import org.futo.circles.core.model.SelectRoomTypeArg import org.futo.circles.core.model.SelectableRoomListItem import org.futo.circles.core.model.isCircle +import org.futo.circles.core.provider.MatrixSessionProvider +import org.matrix.android.sdk.api.session.getRoom +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 import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.user.model.User @@ -31,7 +36,19 @@ fun RoomSummary.toSelectableRoomListItem( fun RoomSummary.toJoinedGalleryListItem() = JoinedGalleryListItem( id = roomId, info = RoomInfo(nameOrId(), avatarUrl), - roomOwner = getRoomOwner(roomId)?.toUser() + roomOwner = getRoomOwner(roomId)?.toUser(), + knockRequestsCount = getKnocksCount(roomId) ) -fun RoomMemberSummary.toUser() = User(userId, notEmptyDisplayName(), avatarUrl) \ No newline at end of file +fun RoomMemberSummary.toUser() = User(userId, notEmptyDisplayName(), avatarUrl) + +fun getKnocksCount(roomId: String): Int { + if (getPowerLevelContent(roomId)?.isCurrentUserAbleToInvite() == false) return 0 + return MatrixSessionProvider.currentSession?.getRoom(roomId)?.membershipService() + ?.getRoomMembers( + roomMemberQueryParams { + excludeSelf = true + memberships = listOf(Membership.KNOCK) + } + )?.size ?: 0 +} \ No newline at end of file diff --git a/core/src/main/java/org/futo/circles/core/model/GalleryListItem.kt b/core/src/main/java/org/futo/circles/core/model/GalleryListItem.kt index 51cdea23f..36029b0a7 100644 --- a/core/src/main/java/org/futo/circles/core/model/GalleryListItem.kt +++ b/core/src/main/java/org/futo/circles/core/model/GalleryListItem.kt @@ -21,14 +21,16 @@ data class GalleryHeaderItem( data class JoinedGalleryListItem( override val id: String, val info: RoomInfo, - val roomOwner: User? + val roomOwner: User?, + val knockRequestsCount: Int ) : GalleryListItem() { fun isMyGallery(): Boolean = roomOwner?.let { it.userId == MatrixSessionProvider.currentSession?.myUserId } ?: true } data class GalleryInvitesNotificationListItem( - val invitesCount: Int + val invitesCount: Int, + val knocksCount: Int ) : GalleryListItem() { override val id: String = "GroupInvitesNotificationListItem" } \ No newline at end of file diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index ac7d1c9f2..1959dbb46 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -131,7 +131,6 @@ <string name="knock_requests_empty_message">You don\'t have any knock request</string> <string name="create">Create</string> <string name="show">Show</string> - <string name="gallery_invites_notification_format">Show %d Gallery invitations</string> <string name="group_invitations">Group invitations</string> <string name="gallery_invitations">Gallery invitations</string> <string name="circle_invitations">Circle invitations</string> diff --git a/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt b/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt index 045ea3cf5..11cb075d3 100644 --- a/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt +++ b/gallery/src/main/java/org/futo/circles/gallery/feature/PhotosDataSource.kt @@ -32,10 +32,13 @@ class PhotosDataSource @Inject constructor() { } val sharedGalleries = joined.filter { !it.isMyGallery() } val invitesCount = galleries.filter { it.membership == Membership.INVITE }.size + var knocksCount = 0 + joined.forEach { knocksCount += it.knockRequestsCount } val displayList = mutableListOf<GalleryListItem>().apply { - if (invitesCount > 0) - add(GalleryInvitesNotificationListItem(invitesCount)) + if (invitesCount > 0 || knocksCount > 0) { + add(GalleryInvitesNotificationListItem(invitesCount, knocksCount)) + } addSection( GalleryHeaderItem.myGalleriesHeader, -- GitLab