Skip to content
Snippets Groups Projects
Commit aaee086c authored by Taras's avatar Taras
Browse files

Remove notify data changed for timeline list based on access level

parent fe0555db
No related branches found
No related tags found
No related merge requests found
......@@ -71,11 +71,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
}
private val listAdapter by lazy {
TimelineAdapter(
getCurrentUserPowerLevel(args.roomId),
this,
isThread
) { loadMoreDebounce(Unit) }.apply {
TimelineAdapter(this, isThread) { loadMoreDebounce(Unit) }.apply {
setHasStableIds(true)
registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
......@@ -216,6 +212,7 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
override fun onShowEmoji(roomId: String, eventId: String, onAddEmoji: (String) -> Unit) {
if (showNoInternetConnection()) return
if (showErrorIfNotAbleToPost()) return
onLocalAddEmojiCallback = onAddEmoji
navigator.navigateToShowEmoji(roomId, eventId)
}
......@@ -246,16 +243,14 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
roomId: String, eventId: String, emoji: String, isUnSend: Boolean
) {
if (showNoInternetConnection()) return
if (viewModel.accessLevelLiveData.value?.isCurrentUserAbleToPost() != true) {
showError(getString(R.string.you_can_not_post_to_this_room))
return
}
if (showErrorIfNotAbleToPost()) return
if (isUnSend) viewModel.unSendReaction(roomId, eventId, emoji)
else viewModel.sendReaction(roomId, eventId, emoji)
}
override fun onPollOptionSelected(roomId: String, eventId: String, optionId: String) {
if (showNoInternetConnection()) return
if (showErrorIfNotAbleToPost()) return
viewModel.pollVote(roomId, eventId, optionId)
}
......@@ -320,7 +315,12 @@ class TimelineDialogFragment : BaseFullscreenDialogFragment(DialogFragmentTimeli
private fun onUserAccessLevelChanged(powerLevelsContent: PowerLevelsContent) {
if (isGroupMode) onGroupUserAccessLevelChanged(powerLevelsContent)
else onCircleUserAccessLeveChanged(powerLevelsContent)
listAdapter.updateUserPowerLevel(getCurrentUserPowerLevel(args.roomId))
}
private fun showErrorIfNotAbleToPost(): Boolean {
val isAbleToPost = viewModel.accessLevelLiveData.value?.isCurrentUserAbleToPost() == true
if (!isAbleToPost) showError(getString(R.string.you_can_not_post_to_this_room))
return !isAbleToPost
}
private fun onGroupUserAccessLevelChanged(powerLevelsContent: PowerLevelsContent) {
......
package org.futo.circles.feature.timeline.list
import android.annotation.SuppressLint
import android.view.ViewGroup
import org.futo.circles.core.base.list.BaseRvAdapter
import org.futo.circles.core.feature.timeline.data_source.BaseTimelineDataSource
......@@ -10,7 +9,6 @@ import org.futo.circles.model.PostItemPayload
import org.futo.circles.view.PostOptionsListener
class TimelineAdapter(
private var userPowerLevel: Int,
private val postOptionsListener: PostOptionsListener,
private val isThread: Boolean,
private val onLoadMore: () -> Unit
......@@ -24,12 +22,6 @@ class TimelineAdapter(
)
}) {
@SuppressLint("NotifyDataSetChanged")
fun updateUserPowerLevel(level: Int) {
userPowerLevel = level
notifyDataSetChanged()
}
override fun getItemId(position: Int): Long = getItem(position).id.hashCode().toLong()
override fun getItemViewType(position: Int): Int = getItem(position).content.type.ordinal
......@@ -45,7 +37,7 @@ class TimelineAdapter(
}
override fun onBindViewHolder(holder: PostViewHolder, position: Int) {
holder.bind(getItem(position), userPowerLevel)
holder.bind(getItem(position))
if (position >= itemCount - BaseTimelineDataSource.LOAD_MORE_THRESHOLD) onLoadMore()
}
......@@ -59,7 +51,7 @@ class TimelineAdapter(
} else {
payloads.forEach {
val payload = (it as? PostItemPayload) ?: return@forEach
if (payload.needToUpdateFullItem) holder.bind(getItem(position), userPowerLevel)
if (payload.needToUpdateFullItem) holder.bind(getItem(position))
else holder.bindPayload(payload)
}
}
......
......@@ -8,6 +8,7 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.annotation.CallSuper
import androidx.core.view.updateLayoutParams
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
......@@ -36,8 +37,9 @@ sealed class PostViewHolder(view: View, private val isThread: Boolean) :
abstract val postLayout: PostLayout
open fun bind(post: Post, userPowerLevel: Int) {
postLayout.setData(post, userPowerLevel, isThread)
@CallSuper
open fun bind(post: Post) {
postLayout.setData(post, isThread)
}
fun bindPayload(payload: PostItemPayload) {
......@@ -94,8 +96,8 @@ class TextMediaPostViewHolder(
.show()
}
override fun bind(post: Post, userPowerLevel: Int) {
super.bind(post, userPowerLevel)
override fun bind(post: Post) {
super.bind(post)
binding.vLoadingView.gone()
when (val content = post.content) {
is TextContent -> bindTextPost(content)
......@@ -159,8 +161,8 @@ class PollPostViewHolder(
binding.lPollPost.setListener(postOptionsListener)
}
override fun bind(post: Post, userPowerLevel: Int) {
super.bind(post, userPowerLevel)
override fun bind(post: Post) {
super.bind(post)
(post.content as? PollContent)?.let {
binding.pollContentView.setup(it) { optionId ->
postOptionsListener.onPollOptionSelected(post.postInfo.roomId, post.id, optionId)
......
......@@ -7,6 +7,7 @@ import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.children
import androidx.core.view.isVisible
import org.futo.circles.core.base.NetworkObserver
import org.futo.circles.core.extensions.getCurrentUserPowerLevel
import org.futo.circles.core.extensions.setIsVisible
import org.futo.circles.core.model.Post
import org.futo.circles.core.model.ReactionsData
......@@ -25,7 +26,6 @@ class PostFooterView(
private var optionsListener: PostOptionsListener? = null
private var post: Post? = null
private var isThreadPost = false
private var userPowerLevel: Int = Role.Default.value
init {
setupViews()
......@@ -56,9 +56,8 @@ class PostFooterView(
optionsListener = postOptionsListener
}
fun setData(data: Post, powerLevel: Int, isThread: Boolean) {
fun setData(data: Post, isThread: Boolean) {
post = data
userPowerLevel = powerLevel
isThreadPost = isThread
bindViewData(data.repliesCount, data.canShare())
bindReactionsList(data.reactionsData)
......@@ -70,12 +69,9 @@ class PostFooterView(
bindReactionsList(reactions)
}
fun areUserAbleToPost() = userPowerLevel >= Role.Default.value
private fun bindViewData(repliesCount: Int, canShare: Boolean) {
with(binding) {
btnShare.setIsVisible(canShare)
btnLike.isEnabled = areUserAbleToPost()
btnReply.apply {
isVisible = !isThreadPost
setRepliesCount(repliesCount)
......@@ -111,7 +107,7 @@ class PostFooterView(
private fun locallyUpdateEmojisList(view: ReactionItemView, reaction: ReactionsData) {
if (!NetworkObserver.isConnected()) return
if (areUserAbleToPost().not()) return
if (!isAbleToPost()) return
if (reaction.addedByMe) {
if (reaction.count == 1) {
binding.lEmojisContainer.removeView(view)
......@@ -139,5 +135,7 @@ class PostFooterView(
}
}
private fun isAbleToPost() =
getCurrentUserPowerLevel(post?.postInfo?.roomId ?: "") >= Role.Default.value
}
\ No newline at end of file
......@@ -49,12 +49,11 @@ class PostLayout(
private val gestureDetector =
GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean {
if (binding.postFooter.areUserAbleToPost())
post?.let {
optionsListener?.onShowEmoji(it.postInfo.roomId, it.id) { emoji ->
binding.postFooter.addEmojiFromPickerLocalUpdate(emoji)
}
post?.let {
optionsListener?.onShowEmoji(it.postInfo.roomId, it.id) { emoji ->
binding.postFooter.addEmojiFromPickerLocalUpdate(emoji)
}
}
return true
}
......@@ -89,9 +88,9 @@ class PostLayout(
}
fun setData(data: Post, userPowerLevel: Int, isThread: Boolean) {
fun setData(data: Post, isThread: Boolean) {
post = data
setGeneralMessageData(data, userPowerLevel, isThread)
setGeneralMessageData(data, isThread)
}
fun setPayload(payload: PostItemPayload) {
......@@ -118,9 +117,9 @@ class PostLayout(
}
}
private fun setGeneralMessageData(data: Post, userPowerLevel: Int, isThread: Boolean) {
private fun setGeneralMessageData(data: Post, isThread: Boolean) {
binding.postHeader.setData(data)
binding.postFooter.setData(data, userPowerLevel, isThread)
binding.postFooter.setData(data, isThread)
setMentionBorder(data.content)
setIsEdited(data.postInfo.isEdited)
setSendStatus(data.sendState, data.readByCount)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment