ExpertSearchAdapter.kt 18.3 KB
Newer Older
1 2 3 4
package com.yidianling.consultant.adapter

import android.annotation.SuppressLint
import android.content.Context
konghaorui committed
5
import android.support.v4.content.ContextCompat
6 7 8 9 10 11 12 13 14 15
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.RecyclerView
import android.text.TextUtils
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import com.ydl.webview.H5Params
import com.ydl.webview.NewH5Activity
import com.ydl.ydl_image.config.SimpleImageOpConfiger
konghaorui committed
16
import com.ydl.ydl_image.module.GlideApp
17 18 19 20 21 22 23 24 25 26 27 28
import com.ydl.ydlcommon.base.config.HttpConfig
import com.ydl.ydlcommon.router.IYDLRouterConstant
import com.ydl.ydlcommon.utils.BuryPointUtils
import com.ydl.ydlcommon.utils.URLUtils
import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils
import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.common.tools.LogUtil
import com.yidianling.consultant.ExpertSearchActivity
import com.yidianling.consultant.IExpertSearchView
import com.yidianling.consultant.R
import com.yidianling.consultant.constants.ConsultBIConstants
import com.yidianling.consultant.model.bean.DoctorServiceItem
29
import com.yidianling.consultant.modular.utils.TempH5RouteUtils
30
import com.yidianling.consultant.router.ConsultantIn
31 32 33 34 35 36
import kotlinx.android.synthetic.main.consultant_expert_search_feedbackrate.view.*
import kotlinx.android.synthetic.main.consultant_expert_search_item_view.view.*
import kotlinx.android.synthetic.main.consultant_expert_search_products_item.view.*
import kotlinx.android.synthetic.main.consultant_item_empty.view.*
import kotlinx.android.synthetic.main.consultant_item_footer.view.*
import kotlinx.android.synthetic.main.consultant_item_tag.view.*
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66

/**
 * 专家服务列表适配器
 */
class ExpertSearchAdapter(private val context: Context, private val expertSearchView : IExpertSearchView, private val listData: ArrayList<DoctorServiceItem>)
    : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    companion object {
        const val NORMAL_VIEW = 0
        const val FOOT_VIEW = 1
        const val EMPTY_VIEW = 2
    }

    //记录当前选择主题的id
    var cateId : String? = null

    var hasMore = true

    var entranceName: String? = null

    fun setEntrance(entranceName: String) {
        this.entranceName = entranceName
    }

    @SuppressLint("SetTextI18n")
    override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
        if (holder is NormalViewHolder) {
            val itemBean = listData[position]
            //头像
            val headConfig = SimpleImageOpConfiger()
67 68
            headConfig.loadingPic = R.drawable.consultant_avatar_def_circle
            headConfig.errorPic = R.drawable.consultant_avatar_def_circle
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
            expertSearchView.showImage(itemBean.head,holder.imgHead,holder.imgHead.width,holder.imgHead.height,headConfig)
            //姓名
            holder.tvName.text = itemBean.name
//            if (TextUtils.isEmpty(itemBean.famousRemark)){
//                holder.group_desc.visibility = View.GONE
//            }else{
//                holder.group_desc.visibility = View.VISIBLE
//                //描述
//                holder.tvDesc.text = itemBean.famousRemark
//            }


            //服务中
            if (itemBean.inConsult || itemBean.isListening) {
                holder.imgHead_online_server.visibility = View.VISIBLE
                holder.chat_people_in_question.visibility = View.GONE
                holder.imgHead_online.visibility = View.GONE
            }else {
                //不是服务中且问询人数大于0
                if (itemBean.chatNum > 5) {
                    holder.chat_people_in_question.visibility = View.VISIBLE
                    holder.chat_people_in_question.text = "多人在问询"
                }else if (itemBean.chatNum > 0){
                    holder.chat_people_in_question.visibility = View.VISIBLE
                    holder.chat_people_in_question.text = "${itemBean.chatNum}人在问询"
                }else {
                    holder.chat_people_in_question.visibility = View.GONE
                }
                //可预约
                holder.imgHead_online_server.visibility = View.GONE
                if (itemBean.isTodayFree == true){
                    holder.imgHead_online.visibility = View.VISIBLE
                }else{
                    holder.imgHead_online.visibility = View.GONE
                }
            }


            //省市
            if (!TextUtils.isEmpty(itemBean.province)){
                holder.tvCity.text = itemBean.province+"·"+itemBean.city
            }else{
                holder.tvCity.text = ""
            }
konghaorui committed
113 114 115
            //能力等级标签
            if (1 == itemBean.abilityLevel){
                //实习
116
                holder.imgAbilityLevel.background = context.resources.getDrawable(R.drawable.consultant_expert_search_shixi)
konghaorui committed
117 118 119
                holder.imgAbilityLevel.visibility = View.VISIBLE
            }else if (2 == itemBean.abilityLevel){
                //新手
120
                holder.imgAbilityLevel.background = context.resources.getDrawable(R.drawable.consultant_expert_search_xinshou)
konghaorui committed
121 122 123 124
                holder.imgAbilityLevel.visibility = View.VISIBLE
            }
//            else if (3 == itemBean.abilityLevel){
//                //精英
125
//                holder.imgAbilityLevel.background = context.resources.getDrawable(R.drawable.consultant_expert_search_jingying)
126 127
//                holder.imgAbilityLevel.visibility = View.VISIBLE
//            }
konghaorui committed
128 129 130
            else{
                holder.imgAbilityLevel.visibility = View.GONE
            }
konghaorui committed
131 132 133 134 135 136 137 138
            //活动图标
            if (!TextUtils.isEmpty(itemBean.activityImg)){
                holder.imgActivity.visibility = View.VISIBLE
                GlideApp.with(context).load(itemBean.activityImg).into(holder.imgActivity)
//                GlideApp.with(context).load("https://video.ydlcdn.com/2019/11/04/abdd3782c98939d0406080a6a80b8ea5.jpg").into(holder.imgActivity)
            }else{
                holder.imgActivity.visibility = View.GONE
            }
139 140 141 142 143 144
            //公益图标
            if (1 == itemBean.hasServiceFree){
                if (null != itemBean.tagsIcon && !TextUtils.isEmpty(itemBean.tagsIcon.serviceFreeIcon)){
                    expertSearchView.showImage(itemBean.tagsIcon.serviceFreeIcon,holder.imgServiceFree)
                }else{
                    val sp = SimpleImageOpConfiger()
145 146
                    sp.loadingPic = R.drawable.consultant_service_free
                    sp.errorPic = R.drawable.consultant_service_free
147 148 149 150 151 152 153 154 155 156 157 158
                    expertSearchView.showImage("",holder.imgServiceFree,sp)
                }
                holder.imgServiceFree.visibility = View.VISIBLE
            }else{
                holder.imgServiceFree.visibility = View.GONE
            }
            //新驻图标
            if (itemBean.isNewEnter){
                if (null != itemBean.tagsIcon && !TextUtils.isEmpty(itemBean.tagsIcon.newEnterIcon)){
                    expertSearchView.showImage(itemBean.tagsIcon.newEnterIcon,holder.imgNewEnter)
                }else{
                    val sp = SimpleImageOpConfiger()
159 160
                    sp.loadingPic = R.drawable.consultant_new_enter
                    sp.errorPic = R.drawable.consultant_new_enter
161 162 163 164 165 166 167 168
                    expertSearchView.showImage("",holder.imgNewEnter,sp)
                }
                holder.imgNewEnter.visibility = View.VISIBLE
            }else{
                holder.imgNewEnter.visibility = View.GONE
            }
            holder.ll_feedbackRate.removeAllViews()
            for (num in 1..5){
169
                val view = LayoutInflater.from(context).inflate(R.layout.consultant_expert_search_feedbackrate, holder.ll_feedbackRate, false)
170
                if (itemBean.feedbackRate >= num){
171
                    (view.imgRate as ImageView).background = context.resources.getDrawable(R.drawable.consultant_expert_search_full_star)
172
                }else if (itemBean.feedbackRate < num && itemBean.feedbackRate > num - 1){
173
                    (view.imgRate as ImageView).background = context.resources.getDrawable(R.drawable.consultant_expert_search_half_star)
174
                }else{
175
                    (view.imgRate as ImageView).background = context.resources.getDrawable(R.drawable.consultant_expert_search_nothing_star)
176 177 178 179 180 181 182 183 184 185 186 187 188
                }
                holder.ll_feedbackRate.addView(view)
            }
            //XXX人点评
            val numSb = StringBuffer()
            holder.tv_zixunOrderNum.text = numSb.append(itemBean.zixunOrderNum).append("").toString()
            //咨询师简介
            holder.tvTeamCertifications.text = itemBean.teamCertifications
            //咨询师标签
            holder.ll_tags.removeAllViews()
            if (!TextUtils.isEmpty(itemBean.tags)){
                val tagList = itemBean.tags!!.split("|")
                for (tag in tagList) {
konghaorui committed
189
                    if (!TextUtils.isEmpty(tag)){
190
                        val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_tag, holder.ll_tags, false)
konghaorui committed
191 192 193
                        view.tvTag.text = tag
                        holder.ll_tags.addView(view)
                    }
194 195 196 197 198 199 200 201 202 203 204 205 206 207
                }
            }
            //帮助人数
            val orderUser = StringBuffer()
            holder.tvOrderNum.text = orderUser.append(itemBean.zixunOrderUser).append("").toString()
//            if ( 50 <= itemBean.zixunOrderNum){
//                holder.tvOrderNumContent.text = "帮助"
//                holder.tvSaleDurationForMonth.visibility = View.VISIBLE
//                holder.tvSaleDurationForMonthContent.visibility = View.VISIBLE
//            }else{
//                holder.tvOrderNumContent.text = "公益解答"
//                holder.tvSaleDurationForMonth.visibility = View.GONE
//                holder.tvSaleDurationForMonthContent.visibility = View.GONE
//            }
konghaorui committed
208 209 210 211 212 213 214 215 216 217
            //私聊文案
            if (TextUtils.isEmpty(itemBean.chatBtnText)){
                holder.tvChat.text = "私聊"
                holder.tvChat.setTextColor(ContextCompat.getColor(context,R.color.white))
                holder.tvChat.background = ContextCompat.getDrawable(context,R.drawable.consultant_expert_search_chat)
            }else{
                holder.tvChat.text = itemBean.chatBtnText
                holder.tvChat.setTextColor(ContextCompat.getColor(context,R.color.platform_color_999999))
                holder.tvChat.background = ContextCompat.getDrawable(context,R.drawable.consultant_expert_search_chat_rest)
            }
218 219 220 221 222 223 224 225 226 227
            //月售时长
            val durationStringBuffer = StringBuffer()
            holder.tvSaleDurationForMonth.text = durationStringBuffer.append(itemBean.saleDurationForMonth.toInt()).append("").toString()
            //价格
            val sb = StringBuffer()
            holder.tvPrice.text = sb.append("").append(itemBean.minBookingPrice).toString()
            //套餐
            holder.ll_products.removeAllViews()
            if (null != itemBean.products && !itemBean.products.isEmpty()){
                for (item in itemBean.products) {
228
                    val view = LayoutInflater.from(context).inflate(R.layout.consultant_expert_search_products_item, holder.ll_tags, false)
229 230
                    if (1 == item.isPackage){
                        view.tvTitle.text = "单次"
konghaorui committed
231
                        view.tvTitle.setTextColor(context.resources.getColor(R.color.platform_color_1DA1F2))
232
                        view.tvTitle.background = context.resources.getDrawable(R.drawable.consultant_expert_search_single)
233 234 235 236
                        view.tvContent.text = item.name
                        holder.ll_products.addView(view)
                    } else if (2 == item.isPackage){
                        view.tvTitle.text = "套餐"
237 238
                        view.tvTitle.setTextColor(context.resources.getColor(R.color.consultant_color_FF9500))
                        view.tvTitle.background = context.resources.getDrawable(R.drawable.consultant_expert_search_menu)
239 240 241 242 243 244 245 246 247 248 249
                        view.tvContent.text = item.name
                        holder.ll_products.addView(view)
                    }else{

                    }
                }
            }
        } else if (holder is FooterViewHolder) {
            if (hasMore) {
                holder.itemView.visibility = View.VISIBLE
                holder.pbLoading.visibility = View.VISIBLE
250
                holder.tvHint.text = context.getString(R.string.consultant_loading)
251 252
            } else {
                holder.pbLoading.visibility = View.GONE
konghaorui committed
253
                holder.tvHint.text = context.getString(R.string.platform_no_more)
254 255 256 257 258 259 260 261 262 263 264 265 266
            }
        }
    }

    override fun getItemCount(): Int = if (listData.size < ExpertSearchActivity.PAGE_SIZE && hasMore) {
        listData.size
    } else {
        listData.size + 1
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder =
            when (viewType) {
                NORMAL_VIEW -> {
267
                    val view = LayoutInflater.from(context).inflate(R.layout.consultant_expert_search_item_view, parent, false)
268 269 270
                    NormalViewHolder(view)
                }
                FOOT_VIEW -> {
271
                    val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_footer, parent, false)
272 273 274
                    FooterViewHolder(view)
                }
                else -> {
275
                    val view = LayoutInflater.from(context).inflate(R.layout.consultant_item_empty, parent, false)
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
                    EmptyViewHolder(view)
                }
            }

    override fun getItemViewType(position: Int): Int = when {
        position < listData.size -> NORMAL_VIEW
        !hasMore && listData.size == 0 -> EMPTY_VIEW
        else -> FOOT_VIEW
    }

    inner class NormalViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        //头像
        val imgHead = itemView.imgHead!!
        //专家姓名
        val tvName = itemView.tvName!!
konghaorui committed
291 292
        //活动图标
        val imgActivity = itemView.img_activity!!
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
        //优质图标
        val imgAbilityLevel = itemView.imgAbilityLevel!!
        //公益图标
        val imgServiceFree = itemView.imgServiceFree!!
        //新驻图标
        val imgNewEnter = itemView.imgNewEnter!!
        //好评率
        val ll_feedbackRate = itemView.ll_feedbackRate!!
        //xxx人点评
        val tv_zixunOrderNum = itemView.tv_zixunOrderNum!!
        //咨询师简介
        val tvTeamCertifications = itemView.tvTeamCertifications!!
        //咨询师标签
        val ll_tags = itemView.ll_tags!!
        //帮助人数
        val tvOrderNum = itemView.tvOrderNum!!
        //帮助人数文案
        val tvOrderNumContent = itemView.tvOrderNumContent
        //月售时长
        val tvSaleDurationForMonth = itemView.tvSaleDurationForMonth!!
        //月售时长文案
        val tvSaleDurationForMonthContent = itemView.tvSaleDurationForMonthContent
        //价格
        val tvPrice = itemView.tvPrice!!
        //服务套餐
        val ll_products = itemView.ll_products!!
        //私聊按钮
        val tvChat = itemView.tvChat!!
        //个人铭言整个布局
        val group_desc = itemView.group_desc!!
        //个人铭言
        val tvDesc = itemView.tvDesc!!
        //省市
        val tvCity = itemView.tvCity!!
        //今日是否可约
        val imgHead_online = itemView.imgHead_online!!
        //服务中(咨询中或者聆听中)
        val imgHead_online_server = itemView.imgHead_online_server!!
        //多少人在问询
        val chat_people_in_question = itemView.people_in_question!!

        init {
            itemView.setOnClickListener {
                //跳转专家主页
                if (adapterPosition != RecyclerView.NO_POSITION) {
                    val itemBean = listData[adapterPosition]
                    var linkUrl = itemBean.linkUrl

                    if (!TextUtils.isEmpty(cateId)){
                        linkUrl = URLUtils.appendParmas(linkUrl,"cateId",cateId)
                    }
                    ActionCountUtils.count(ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_DOCTOR_CLICK,itemBean.doctorId?:"")
345
                    TempH5RouteUtils.tempH5Route(linkUrl)
346 347 348 349 350 351 352 353 354 355

//                   var params = URLDecoder.decode( Uri.parse(linkUrl)!!.getQueryParameter("params"),"UTF-8")
//                    ARouter.getInstance().build("/h5/h5").withSerializable("routerParam",params).navigation()

                }
            }

            itemView.tvChat.setOnClickListener {
                if (adapterPosition != RecyclerView.NO_POSITION) {
                    //判断是否已登录
356
                    if(!ConsultantIn.getUserImpl().isLogin()){
357
                        TempH5RouteUtils.tempH5Route(IYDLRouterConstant.ROUTER_MINE_LOGIN)
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397
                        return@setOnClickListener
                    }
                    val doctor = listData[adapterPosition]
                    ActionCountUtils.count(ConsultBIConstants.ConsultEvent.APP_CONSULT_LIST_CHAT_CLICK,doctor.doctorId?:"")

                    if (!TextUtils.isEmpty(doctor.uid)) {
                        //跳转私聊
                        ConsultantIn.startP2PSession(context as AppCompatActivity, doctor.uid!!)
                    } else {
                        ToastHelper.show("请联系客服,专家参数错误!")
                    }
                    if (!TextUtils.isEmpty(entranceName)) {
                        LogUtil.d("entrance name: $entranceName")
                        BuryPointUtils.getInstance().createMap()
                                .put("expert_entrance", entranceName?:"")
                                .put("expert_ID", doctor.doctorId?:0)
                                .put("expert_name", doctor.name?:"")
                                .burryPoint("Chat_click")
                    }
                }
            }
        }
    }

    inner class FooterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val pbLoading = itemView.pbLoading!!
        val tvHint = itemView.tvHint!!
    }

    inner class EmptyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val btnSearchByCat = itemView.btnSearchByCat!!

        init {
            btnSearchByCat.setOnClickListener {
                val h5Params = H5Params(HttpConfig.H5_URL + "experts/cates", null)
                NewH5Activity.start(context, h5Params)
            }
        }
    }
}