diff --git a/app/src/main/java/org/futo/circles/feature/groups/GroupsFragment.kt b/app/src/main/java/org/futo/circles/feature/groups/GroupsFragment.kt index 25892ade54698950682d8988d787ced407582c35..b8054b5f8038e3a51282f275c9643ef79cd53bf5 100644 --- a/app/src/main/java/org/futo/circles/feature/groups/GroupsFragment.kt +++ b/app/src/main/java/org/futo/circles/feature/groups/GroupsFragment.kt @@ -22,7 +22,6 @@ import org.futo.circles.core.extensions.navigateSafe import org.futo.circles.core.extensions.observeData import org.futo.circles.core.extensions.observeResponse import org.futo.circles.core.extensions.setEnabledViews -import org.futo.circles.core.extensions.showNoInternetConnection import org.futo.circles.core.model.CircleRoomTypeArg import org.futo.circles.core.provider.PreferencesProvider import org.futo.circles.core.view.EmptyTabPlaceholderView @@ -38,12 +37,7 @@ class GroupsFragment : Fragment(org.futo.circles.core.R.layout.fragment_rooms), private val listAdapter by lazy { GroupsListAdapter( onRoomClicked = { roomListItem -> onRoomListItemClicked(roomListItem) }, - onInviteClicked = { roomListItem, isAccepted -> - onInviteClicked(roomListItem, isAccepted) - }, - onUnblurProfileIconClicked = { roomListItem -> - viewModel.unblurProfileIcon(roomListItem) - } + onOpenInvitesClicked = {} ) } @@ -92,12 +86,6 @@ class GroupsFragment : Fragment(org.futo.circles.core.R.layout.fragment_rooms), viewModel.inviteResultLiveData.observeResponse(this) } - private fun onInviteClicked(room: GroupListItem, isAccepted: Boolean) { - if (showNoInternetConnection()) return - if (isAccepted) viewModel.acceptGroupInvite(room.id) - else viewModel.rejectInvite(room.id) - } - private fun onRoomListItemClicked(room: GroupListItem) { findNavController().navigateSafe(GroupsFragmentDirections.toTimeline(room.id)) diff --git a/app/src/main/java/org/futo/circles/feature/groups/GroupsViewModel.kt b/app/src/main/java/org/futo/circles/feature/groups/GroupsViewModel.kt index 9f9812e7ccd3b972f0b0cbce2e8222718931b5c3..6e8268fa68c98b64a984065a6ed0b48d69edbeaf 100644 --- a/app/src/main/java/org/futo/circles/feature/groups/GroupsViewModel.kt +++ b/app/src/main/java/org/futo/circles/feature/groups/GroupsViewModel.kt @@ -5,36 +5,14 @@ import androidx.lifecycle.asLiveData import dagger.hilt.android.lifecycle.HiltViewModel import org.futo.circles.core.base.SingleEventLiveData import org.futo.circles.core.extensions.Response -import org.futo.circles.core.extensions.launchBg -import org.futo.circles.core.feature.room.invite.InviteRequestsDataSource -import org.futo.circles.core.model.CircleRoomTypeArg -import org.futo.circles.model.GroupListItem import javax.inject.Inject @HiltViewModel class GroupsViewModel @Inject constructor( - private val dataSource: GroupsDataSource, - private val inviteRequestsDataSource: InviteRequestsDataSource + dataSource: GroupsDataSource ) : ViewModel() { val roomsLiveData = dataSource.getGroupsFlow().asLiveData() val inviteResultLiveData = SingleEventLiveData<Response<Unit?>>() - fun rejectInvite(roomId: String) { - launchBg { - val result = inviteRequestsDataSource.rejectInvite(roomId) - inviteResultLiveData.postValue(result) - } - } - - fun acceptGroupInvite(roomId: String) { - launchBg { - val result = inviteRequestsDataSource.acceptInvite(roomId, CircleRoomTypeArg.Group) - inviteResultLiveData.postValue(result) - } - } - - fun unblurProfileIcon(roomListItem: GroupListItem) { - dataSource.unblurProfileImageFor(roomListItem.id) - } } \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/groups/list/GroupViewHolder.kt b/app/src/main/java/org/futo/circles/feature/groups/list/GroupViewHolder.kt index 60e8163cc4196a5e66870ebf703b5f00890d67c4..71765124dfd0c0a72e5cbd01113e9b8a80464239 100644 --- a/app/src/main/java/org/futo/circles/feature/groups/list/GroupViewHolder.kt +++ b/app/src/main/java/org/futo/circles/feature/groups/list/GroupViewHolder.kt @@ -12,25 +12,17 @@ import org.futo.circles.core.base.list.context import org.futo.circles.core.extensions.loadRoomProfileIcon import org.futo.circles.core.extensions.onClick import org.futo.circles.core.extensions.setIsVisible -import org.futo.circles.databinding.ListItemInvitedGroupBinding +import org.futo.circles.databinding.ListItemInviteNotificationBinding import org.futo.circles.databinding.ListItemJoinedGroupBinding import org.futo.circles.extensions.setIsEncryptedIcon +import org.futo.circles.model.GroupInvitesNotificationListItem import org.futo.circles.model.GroupListItem import org.futo.circles.model.GroupListItemPayload -import org.futo.circles.model.InvitedGroupListItem import org.futo.circles.model.JoinedGroupListItem abstract class GroupViewHolder(view: View) : RecyclerView.ViewHolder(view) { abstract fun bind(data: GroupListItem) - - protected fun setIsEncrypted(lockIcon: ImageView, isEncrypted: Boolean) { - lockIcon.setIsEncryptedIcon(isEncrypted) - } - - protected fun setTitle(titleView: TextView, title: String) { - titleView.text = title - } } class JoinedGroupViewHolder( @@ -67,6 +59,14 @@ class JoinedGroupViewHolder( data.unreadCount?.let { setUnreadCount(it) } } + private fun setIsEncrypted(lockIcon: ImageView, isEncrypted: Boolean) { + lockIcon.setIsEncryptedIcon(isEncrypted) + } + + private fun setTitle(titleView: TextView, title: String) { + titleView.text = title + } + private fun setTopic(topic: String) { binding.tvTopic.setIsVisible(topic.isNotEmpty()) binding.tvTopic.text = context.getString(R.string.topic_formatter, topic) @@ -102,38 +102,22 @@ class JoinedGroupViewHolder( } } -class InvitedGroupViewHolder( +class GroupInviteNotificationViewHolder( parent: ViewGroup, - onInviteClicked: (Int, Boolean) -> Unit, - onShowProfileIconClicked: (Int) -> Unit -) : GroupViewHolder(inflate(parent, ListItemInvitedGroupBinding::inflate)) { + onClicked: () -> Unit +) : GroupViewHolder(inflate(parent, ListItemInviteNotificationBinding::inflate)) { private companion object : ViewBindingHolder - private val binding = baseBinding as ListItemInvitedGroupBinding + private val binding = baseBinding as ListItemInviteNotificationBinding init { - onClick(binding.btnAccept) { position -> onInviteClicked(position, true) } - onClick(binding.btnDecline) { position -> onInviteClicked(position, false) } - onClick(binding.ivGroup) { position -> onShowProfileIconClicked(position) } + onClick(binding.lInviteNotification) { _ -> onClicked() } } override fun bind(data: GroupListItem) { - if (data !is InvitedGroupListItem) return - - with(binding) { - ivGroup.loadRoomProfileIcon( - data.info.avatarUrl, - data.info.title, - applyBlur = data.shouldBlurIcon - ) - tvShowProfileImage.setIsVisible(data.shouldBlurIcon) - setIsEncrypted(ivLock, data.isEncrypted) - setTitle(tvGroupTitle, data.info.title) - tvInviterName.text = context.getString( - org.futo.circles.core.R.string.invited_by_format, - data.inviterName - ) - } + if (data !is GroupInvitesNotificationListItem) return + binding.tvInvitesMessage.text = + context.getString(R.string.group_invites_notification_format, data.invitesCount) } } \ No newline at end of file diff --git a/app/src/main/java/org/futo/circles/feature/groups/list/GroupsListAdapter.kt b/app/src/main/java/org/futo/circles/feature/groups/list/GroupsListAdapter.kt index 28a1c07d424601b989367e8467d5117b2750d54b..825a1af45a754a0fff16d56f419ff6de79d188d4 100644 --- a/app/src/main/java/org/futo/circles/feature/groups/list/GroupsListAdapter.kt +++ b/app/src/main/java/org/futo/circles/feature/groups/list/GroupsListAdapter.kt @@ -2,17 +2,16 @@ package org.futo.circles.feature.groups.list import android.view.ViewGroup import org.futo.circles.core.base.list.BaseRvAdapter +import org.futo.circles.model.GroupInvitesNotificationListItem import org.futo.circles.model.GroupListItem import org.futo.circles.model.GroupListItemPayload -import org.futo.circles.model.InvitedGroupListItem import org.futo.circles.model.JoinedGroupListItem -enum class GroupListItemViewType { JoinedGroup, InvitedGroup } +enum class GroupListItemViewType { JoinedGroup, InviteNotification } class GroupsListAdapter( private val onRoomClicked: (GroupListItem) -> Unit, - private val onInviteClicked: (GroupListItem, Boolean) -> Unit, - private val onUnblurProfileIconClicked: (GroupListItem) -> Unit + private val onOpenInvitesClicked: () -> Unit ) : BaseRvAdapter<GroupListItem, GroupViewHolder>(PayloadIdEntityCallback { old, new -> if (new is JoinedGroupListItem && old is JoinedGroupListItem) { GroupListItemPayload( @@ -29,26 +28,17 @@ class GroupsListAdapter( override fun getItemViewType(position: Int): Int = when (getItem(position)) { is JoinedGroupListItem -> GroupListItemViewType.JoinedGroup.ordinal - is InvitedGroupListItem -> GroupListItemViewType.InvitedGroup.ordinal + is GroupInvitesNotificationListItem -> GroupListItemViewType.InviteNotification.ordinal } override fun onCreateViewHolder( - parent: ViewGroup, - viewType: Int + parent: ViewGroup, viewType: Int ) = when (GroupListItemViewType.values()[viewType]) { - GroupListItemViewType.JoinedGroup -> JoinedGroupViewHolder( - parent = parent, - onGroupClicked = { position -> onRoomClicked(getItem(position)) } - ) + GroupListItemViewType.JoinedGroup -> JoinedGroupViewHolder(parent = parent, + onGroupClicked = { position -> onRoomClicked(getItem(position)) }) - GroupListItemViewType.InvitedGroup -> InvitedGroupViewHolder( - parent = parent, - onInviteClicked = { position, isAccepted -> - onInviteClicked(getItem(position), isAccepted) - }, - onShowProfileIconClicked = { position -> - onUnblurProfileIconClicked(getItem(position)) - } + GroupListItemViewType.InviteNotification -> GroupInviteNotificationViewHolder( + parent = parent, onClicked = { onOpenInvitesClicked() } ) } @@ -57,9 +47,7 @@ class GroupsListAdapter( } override fun onBindViewHolder( - holder: GroupViewHolder, - position: Int, - payloads: MutableList<Any> + holder: GroupViewHolder, position: Int, payloads: MutableList<Any> ) { if (payloads.isEmpty()) { super.onBindViewHolder(holder, position, payloads) diff --git a/app/src/main/res/layout/list_item_invite_notification.xml b/app/src/main/res/layout/list_item_invite_notification.xml new file mode 100644 index 0000000000000000000000000000000000000000..fcb76598d9a173d7f70638bd25a9be346806ddb1 --- /dev/null +++ b/app/src/main/res/layout/list_item_invite_notification.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/lInviteNotification" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?selectableItemBackgroundBorderless" + android:padding="8dp"> + + <TextView + android:id="@+id/tvInvitesMessage" + style="@style/body" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:textColor="@color/blue" + tools:text="@string/group_invites_notification_format" /> + +</FrameLayout> \ No newline at end of file