package com.yidianling.medical.im.adapter import android.app.Dialog import android.content.Context import android.text.TextUtils import android.view.View import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.RecyclerView import com.netease.nimlib.sdk.NIMClient import com.netease.nimlib.sdk.msg.MsgService import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum import com.ydl.ydlcommon.base.lifecycle.ILifecycleable import com.ydl.ydlcommon.data.http.RxUtils import com.ydl.ydlcommon.utils.log.LogHelper import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.view.ListNoCancelDialog import com.yidianling.im.api.param.RmHistoryParam import com.yidianling.im.api.param.RmTalkParam import com.yidianling.im.api.param.TopMessageParam import com.yidianling.im.bridge.P2PCustomActionHandlerImpl import com.yidianling.im.event.UpdateTabUnreadNumEvent import com.yidianling.im.helper.IMChatUtil import com.yidianling.im.helper.MsgReceiveHelper import com.yidianling.im.http.ImHttpImpl import com.yidianling.im.session.SessionHelper import com.yidianling.im.ui.page.fragment.bean.ChatItemBean import com.yidianling.im.ui.page.fragment.view.ChatTimeItemView import com.yidianling.medical.im.view.MedicalChatItemView import de.greenrobot.event.EventBus /** * 互动列表适配器 * Created by xj on 2019/10/14. */ class MedicalChatAdapter( var context: Context, private var mList: ArrayList<ChatItemBean>, private var lifecycleable: ILifecycleable<*> ) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { companion object { const val TYPE_NORMAL_ITEM = 1001 // 正常item const val TYPE_TIME_ITEM = 1002 // 三周前item } fun setData(data: ArrayList<ChatItemBean>) { mList.clear() mList.addAll(data) notifyDataSetChanged() } override fun getItemViewType(position: Int): Int { if (position < mList.size && !mList[position].isThreeItem) return TYPE_NORMAL_ITEM return TYPE_TIME_ITEM } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is ChatItemHolder -> { holder.view.initData(mList[position]) holder.view.setOnClickListener { //点击去私聊 if (TextUtils.equals(mList[position].toUid.toString(), "4108805")) { SessionHelper.startP2PSession( context, -1, "4108805", null, P2PCustomActionHandlerImpl("4108805", "课程小助手-壹壹", "4108805") ) } else { IMChatUtil.startChat(context as AppCompatActivity, mList[position]) // IMChatUtil.startCms(context as AppCompatActivity, 18, "main_xinliyisheng") } } holder.view.setOnLongClickListener { var nowBean = mList[position] val name = java.util.ArrayList<String>() name.add("删除") if (nowBean.is_top == 1) { name.add("取消置顶") } else if (nowBean.is_top == 0) { name.add("置顶该聊天") } val unread = MsgReceiveHelper.getUnNum(nowBean.toUid.toString())//获取未读消息数量 if (unread > 0) { name.add("标记为已读") } val builder = ListNoCancelDialog.Builder(context, name, 0) builder.SetOnItemClickLister(object : ListNoCancelDialog.Builder.OnItemClickLister { override fun onItemClick(dialog: Dialog, view: View, position1: Int) { val tag = name[position1] when (tag) { "删除" -> { delete(nowBean) dialog.dismiss() } "置顶该聊天" -> { toTop(nowBean, 1) dialog.dismiss() } "取消置顶" -> { toTop(nowBean, 0) dialog.dismiss() } "标记为已读" -> { mark(nowBean) dialog.dismiss() } } } override fun onItemLongClick(dialog: Dialog, view: View, position1: Int) { } }) builder.create().show() true } } is ChatTimeItemHolder -> { holder.view.initData(mList[position]) } else -> { } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { TYPE_NORMAL_ITEM -> { ChatItemHolder(MedicalChatItemView(context)) } else -> { ChatTimeItemHolder(ChatTimeItemView(context)) } } } override fun getItemCount(): Int { return mList.size } private fun delete(bean: ChatItemBean) { LogHelper.getInstance().writeLogSync("删除聊天:uid = " + bean.toUid) var dis = ImHttpImpl.getInstance().rmHistory( RmHistoryParam( bean.toUid.toString(), 1 ) ) .compose(RxUtils.applySchedulers(lifecycleable)) .compose(RxUtils.resultData()) .subscribe({ o -> LogHelper.getInstance().writeLogSync("删除聊天成功:uid = " + bean.toUid) NIMClient.getService(MsgService::class.java) .clearChattingHistory(bean.toUid.toString(), SessionTypeEnum.P2P) deleteItem(bean) }, { t -> ToastHelper.show(t.message.toString()) LogHelper.getInstance().writeLogSync("删除聊天失败:uid = " + bean.toUid) }) } private fun deleteItem(bean: ChatItemBean) { var dis = ImHttpImpl.getInstance().rmTalk(RmTalkParam(bean.toUid.toString())) .compose(RxUtils.applySchedulers(lifecycleable)) .compose(RxUtils.resultData()) .subscribe({ o -> NIMClient.getService(MsgService::class.java) .clearUnreadCount(bean.toUid.toString(), SessionTypeEnum.P2P) NIMClient.getService(MsgService::class.java) .clearUnreadCount(bean.toUid.toString(), SessionTypeEnum.Team) MsgReceiveHelper.updateNum(bean.toUid.toString(), 0) EventBus.getDefault().post(UpdateTabUnreadNumEvent()) }, { t -> ToastHelper.show(t.message.toString()) }) } private fun toTop(bean: ChatItemBean, istop: Int) { LogHelper.getInstance().writeLogSync( "置顶聊天:uid = " + bean.toUid.toString() + "取消置顶 = " + (istop == 0) ) var dis = ImHttpImpl.getInstance().topMessage( TopMessageParam( bean.toUid.toString(), 1, istop ) ) .compose(RxUtils.applySchedulers(lifecycleable)) .compose(RxUtils.resultData()) .subscribe({ o -> LogHelper.getInstance().writeLogSync( "置顶聊天成功:uid = " + bean.toUid.toString() + "取消置顶 = " + (istop == 0) ) mListener?.onRefresh() }, { t -> LogHelper.getInstance().writeLogSync( "置顶聊天失败:uid = " + bean.toUid.toString() + "取消置顶 = " + (istop == 0) ) ToastHelper.show("操作失败") }) } private fun mark(bean: ChatItemBean) { LogHelper.getInstance().writeLogSync("标记为已读:uid = " + bean.toUid.toString()) NIMClient.getService(MsgService::class.java) .clearUnreadCount(bean.toUid.toString(), SessionTypeEnum.P2P) MsgReceiveHelper.updateNum(bean.toUid.toString(), 0) mListener?.onRefresh() EventBus.getDefault().post(UpdateTabUnreadNumEvent()) } private var mListener: ChatRecyclerViewCallback? = null fun setlistener(listener: ChatRecyclerViewCallback) { this.mListener = listener } interface ChatRecyclerViewCallback { fun onRefresh() //刷新聊天列表 } /** * 互动列表正常item的holder */ inner class ChatItemHolder(val view: MedicalChatItemView) : RecyclerView.ViewHolder(view) /** * 互动列表正常item的holder */ inner class ChatTimeItemHolder(val view: ChatTimeItemView) : RecyclerView.ViewHolder(view) }