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 fb38856720163041ed4cb6b55397ad0c8b961ea2..eff69942fe53c288363bc8d66fe4f0dfcc6e6812 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 8012e5df6e7f8054c075b78bdcc2ec4353b475fb..aa6b2d0c3a58b9f94ad794fba4480e68eb823982 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 cf6d75c719fee3f0f64356123e2e530e5e0de76c..6d4f1b1331daa0a3942059b317431ba3bf4cd8d3 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 b5de996eb4ed953864d3cbdd2fb00e45f8dab47c..662f47ca94c7bf6099e73f61f0d1555c30572cc1 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 166497ae605203ce6eee138f421a4333438498a0..5394b12184332524d18504846c1ffff3bba8a1cc 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 51cdea23f708cbfbc3dd785649efd746590ad497..36029b0a72c69e7e55ea536855ba97ce1f6d0063 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 ac7d1c9f21b7f39c84eceb5eba236f7bbd41d6ce..1959dbb4636a417dc6ba12421ff6ab1f3d41be17 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 045ea3cf5b879b6ee077495364f818cdca31a623..11cb075d392cd173abb2137b5e0324d593e7609a 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,