lmw
2024-10-23 2f204867ad034d3a95ba9acc112d6507f296447b
app/src/main/java/com/sinata/xqmuse/ui/discovery/adapter/CommentAdapter.kt
@@ -1,116 +1,52 @@
package com.sinata.xqmuse.ui.discovery.adapter
import android.view.View
import android.widget.TextView
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.adapter.HFRecyclerAdapter
import cn.sinata.xldutils.adapter.util.ViewHolder
import cn.sinata.xldutils.gone
import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.SpanBuilder
import cn.sinata.xldutils.utils.showAllowingStateLoss
import cn.sinata.xldutils.visible
import com.facebook.drawee.view.SimpleDraweeView
import com.sinata.xqmuse.R
import com.sinata.xqmuse.dialog.CommentClickPop
import com.sinata.xqmuse.dialog.ReplyDialog
import com.sinata.xqmuse.dialog.CommentLongClickDialog
import com.sinata.xqmuse.dialog.ReportDialog
import com.sinata.xqmuse.network.Comment
import com.sinata.xqmuse.dialog.SuccessDialog
import com.sinata.xqmuse.network.HttpManager
import com.sinata.xqmuse.network.ReplyComment
import com.sinata.xqmuse.network.entity.Comment
import com.sinata.xqmuse.network.request
import com.sinata.xqmuse.ui.discovery.DynamicActivity
import com.sinata.xqmuse.ui.discovery.ReplyActivity
import com.sinata.xqmuse.utils.Const
import com.sinata.xqmuse.utils.event.EmptyEvent
import com.sinata.xqmuse.utils.extention.clickDelay
import com.sinata.xqmuse.utils.interfaces.StringCallback
import org.greenrobot.eventbus.EventBus
import org.jetbrains.anko.dip
import org.jetbrains.anko.startActivity
import java.util.ArrayList
class CommentAdapter(comment: ArrayList<Comment>):HFRecyclerAdapter<Comment>(comment, R.layout.item_comment) {
    val findId by lazy {
        (context as DynamicActivity).id
    }
    var layoutManager: LinearLayoutManager? = null
    var callback:StringCallback? = null
    override fun onBind(holder: ViewHolder, position: Int, data: Comment) {
        holder.bind<SimpleDraweeView>(R.id.iv_avatar).setImageURI(data.headImg)
        holder.setText(R.id.tv_name,data.userName)
        holder.bind<SimpleDraweeView>(R.id.iv_avatar).setImageURI(data.avatar)
        holder.setText(R.id.tv_name,data.nickname)
        holder.setText(R.id.tv_content,data.content)
        holder.setText(R.id.tv_time,data.insertTime)
        val tv_reply_count = holder.bind<TextView>(R.id.tv_reply_count)
        if (data.commentList.size>2&&!data.showAll){
            tv_reply_count.text = "查看${data.commentList.size}条回复"
            tv_reply_count.visible()
            tv_reply_count.setOnClickListener {
                context.startActivity<ReplyActivity>("data" to data,"findId" to findId)
            }
        }else
            tv_reply_count.gone()
        holder.setText(R.id.tv_time,data.publishTime)
        val tv_reply = holder.bind<TextView>(R.id.tv_reply)
        if (data.replyContent.isNullOrEmpty())
            tv_reply.gone()
        else{
            tv_reply.visible()
            tv_reply.text = SpanBuilder("平台回复:${data.replyContent}").bold(0,5).build()
        }
        val tv_like = holder.bind<TextView>(R.id.tv_like)
        tv_like.text = data.likeCount.toString()
        tv_like.setCompoundDrawablesRelativeWithIntrinsicBounds(if (data.isLike == "1") R.mipmap.dianzaned else R.mipmap.dianzan,0,0,0) //todo是否点赞
        tv_like.setCompoundDrawablesRelativeWithIntrinsicBounds(0,0,if (data.like == 1) R.mipmap.dianzaned else R.mipmap.dianzan,0) //todo是否点赞
        tv_like.clickDelay {
            if (data.isLike!="1")
                HttpManager.doLike(findId,2,data.id).request(context as BaseActivity){_,_->
                    data.isLike = if (data.isLike == "1") "0" else "1"
                    data.likeCount = if (data.isLike == "1") data.likeCount+1 else data.likeCount-1
                HttpManager.doLike(data.id).request(context as BaseActivity){_,_->
                    data.like = if (data.like == 1) 2 else 1
                    notifyItemChanged(position)
                }
        }
        holder.itemView.setOnClickListener {
            val conversationLongClickPop = CommentClickPop(context)
            conversationLongClickPop.setCallback(object : StringCallback {
                override fun onResult(rst: String) {
                    val activity = context as BaseActivity
                    val type = if(rst == "report") ReportDialog.TYPE_REPORT else if (data.replyUserId == SPUtils.instance().getString(
                            Const.User.USER_ID,"-1")) ReportDialog.TYPE_REPLY else ReportDialog.TYPE_COMMENT
                    if(type == ReportDialog.TYPE_REPORT)
                        ReportDialog.show(
                            activity.supportFragmentManager,
                            object : StringCallback {
                                override fun onResult(rst: String) {
                                    HttpManager.report(2,data.id,rst).request(activity){ _, _->
                                        activity.myToast("举报成功")
                                    }
                                }
                            })
                    else
                        ReplyDialog.show(activity.supportFragmentManager,"回复${data.userName}",object :StringCallback{
                            override fun onResult(rst: String) {
                                HttpManager.addComment(findId,data.id,rst,data.id,data.userId).request(activity){ _, _->
                                    EventBus.getDefault().post(EmptyEvent(Const.EventCode.REFRESH_REPLY))
                                    activity.myToast("评论成功")
                                }
                            }
                        })
                }
            })
            conversationLongClickPop.showAsDropDown(holder.bind(R.id.tv_name),context.dip(200),0)
        holder.itemView.setOnLongClickListener {
            callback?.onResult(position.toString())
            return@setOnLongClickListener false
        }
        val rv_reply = holder.bind<RecyclerView>(R.id.rv_reply)
        rv_reply.layoutManager = LinearLayoutManager(context)
        val reply = arrayListOf<ReplyComment>()
        val adapter = ReplyAdapter(reply)
        adapter.findId = findId
        adapter.commentId = data.id
        if (data.showAll){
            reply.addAll(data.commentList)
        }else{
            reply.addAll(data.commentList.take(2))
        }
        rv_reply.adapter = adapter
    }
    override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
        super.onAttachedToRecyclerView(recyclerView)
        layoutManager = recyclerView.layoutManager as LinearLayoutManager
    }
}