package com.yidianling.consultant.ui.view import android.annotation.SuppressLint import android.content.Context import android.graphics.Region import android.graphics.drawable.BitmapDrawable import androidx.recyclerview.widget.LinearLayoutManager import android.view.LayoutInflater import android.view.ViewGroup import android.widget.PopupWindow import com.tencent.mmkv.MMKV import com.ydl.ydlcommon.adapter.MyBaseAdapter import com.ydl.ydlcommon.utils.actionutil.ActionCountUtils import com.ydl.ydlcommon.view.dialog.CommonDialog import com.yidianling.common.tools.RxDeviceTool import com.yidianling.common.tools.RxImageTool import com.yidianling.common.tools.ToastUtil import com.yidianling.consultant.R import com.yidianling.consultant.adapter.RegionRecyclerViewAdapter import com.yidianling.consultant.adapter.SubRecyclerViewAdapter import com.yidianling.consultant.bean.ConsultantRecentCity import com.yidianling.consultant.constants.ConsultBIConstants import com.yidianling.consultant.constants.ConsultBIConstants.ConsultEvent.Companion.CITY_NAME_CLICK import com.yidianling.consultant.constants.ConsultBIConstants.ConsultantLocationAuth.Companion.RECENT_CITY import com.yidianling.consultant.model.SearchApi import com.yidianling.consultant.model.bean.RegionItem import com.yidianling.consultant.model.bean.SubItem import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers import kotlinx.android.synthetic.main.consultant_ui_region_popup_window.view.* /** * 地区选择弹窗 */ class AreaPopupWindow( val context: Context, regionList: ArrayList<RegionItem>, private var selectedRegion: RegionItem, private var selectedSub: SubItem, private val isAgree: Boolean ) : PopupWindow(null, ViewGroup.LayoutParams.MATCH_PARENT, RxImageTool.dp2px(369f)) { private val subList = ArrayList<SubItem>() private val regionAdapter = RegionRecyclerViewAdapter(context, regionList, selectedRegion) private var subAdapter: SubRecyclerViewAdapter private var recentCityBean: ConsultantRecentCity? = ConsultantRecentCity(arrayListOf()) var onRegionSelectedListener: OnRegionSelectedListener? = null private var subLocationItem: SubItem? = SubItem() private val locationCode = "-1" private var locationList: ArrayList<SubItem>? = arrayListOf() private var locationHistoryList = regionList init { val view = LayoutInflater.from(context).inflate(R.layout.consultant_ui_region_popup_window, null) this.contentView = view this.isFocusable = true @Suppress("DEPRECATION") this.setBackgroundDrawable(BitmapDrawable()) this.isOutsideTouchable = true this.height = ((RxDeviceTool.getScreenHeight(context) - RxImageTool.dp2px(90f)) * 0.618).toInt() //设置高度为屏幕的80% regionAdapter.regionList = regionList if (selectedRegion.sub.isNotEmpty()) { subList.addAll(selectedRegion.sub) } else { subList.addAll(regionList[0].sub) } recentCityBean = MMKV.defaultMMKV().decodeParcelable( RECENT_CITY, ConsultantRecentCity::class.java ) if (recentCityBean == null) recentCityBean = ConsultantRecentCity(arrayListOf()) subAdapter = SubRecyclerViewAdapter(context, subList, selectedSub, locationCode) subAdapter.setOnAuthClickLister(object : SubRecyclerViewAdapter.OnAuthClickLister { override fun onAuthClick() { val dialog = CommonDialog(context) .setTitle("温馨提示") .setMessage("建议您授权定位权限,就能轻松获取周边优秀咨询师和其他服务") .setLeftOnclick("暂不") { v1 -> ActionCountUtils.count( ConsultBIConstants.ConsultEvent.AUTHORIZATION_ICON_CLICK, "暂不" ) }.setRightClick("授权") { v12 -> ActionCountUtils.count( ConsultBIConstants.ConsultEvent.AUTHORIZATION_ICON_CLICK, "授权" ) MMKV.defaultMMKV().encode( ConsultBIConstants.ConsultantLocationAuth.WHETHER_LOCATION_AUTH, true ) getRegionByIp(true, true) } dialog.show() } }) view.rvRegion.layoutManager = LinearLayoutManager( context, LinearLayoutManager.VERTICAL, false ) regionAdapter.onItemClickListener = MyBaseAdapter.OnItemClickListener { _, _, data -> selectedRegion = data subList.clear() subList.addAll(data.sub) subAdapter.notifyDataSetChanged() view.rvSub.scrollToPosition(0) } view.rvRegion.adapter = regionAdapter val i = regionList .takeWhile { it.key != selectedRegion.key } .count() view.rvRegion.scrollToPosition(i) view.rvSub.layoutManager = LinearLayoutManager( context, LinearLayoutManager.VERTICAL, false ) subAdapter.onItemClickListener = MyBaseAdapter.OnItemClickListener { _, _, data -> saveCitySearchRecord(data) selectedSub = data ActionCountUtils.count(CITY_NAME_CLICK, data.value.toString()) onRegionSelectedListener?.onRegionSelected(selectedRegion, selectedSub) } view.rvSub.adapter = subAdapter view.rvSub.scrollToPosition(subList.indexOf(selectedSub) + 1) } //倒序保留最近五次的搜索历史记录并去重 private fun saveCitySearchRecord(data: SubItem) { if (data.value == "不限") return if (selectedRegion.code.toString() != "0") data.provinceCode = selectedRegion.code.toString() recentCityBean?.let { if (it.recentCity.size < 5) { it.recentCity.add(0, data) it.recentCity = it.recentCity.toMutableSet().toMutableList() MMKV.defaultMMKV().encode(RECENT_CITY, recentCityBean) } else { it.recentCity.removeAt(it.recentCity.size - 1) it.recentCity.add(0, data) it.recentCity = it.recentCity.toMutableSet().toMutableList() MMKV.defaultMMKV().encode(RECENT_CITY, recentCityBean) } } } @SuppressLint("CheckResult") fun getRegionByIp(agreeLocation: Boolean, refreshAdapter: Boolean) { if (agreeLocation) { SearchApi.getSearchApi().getCityByIp() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.code == "200") { subLocationItem?.code = it.data.city_code subLocationItem?.key = it.data.city_code subLocationItem?.value = it.data.city_name subLocationItem?.locationCode = locationCode locationList?.clear() subLocationItem?.let { locationList?.add(it) } locationHistoryList.get(0).code = it.data.province_code locationHistoryList.get(0).key = it.data.province_code locationHistoryList.get(0).value = "定位" locationList?.let { locationHistoryList.get(0).sub = it } subList.clear() locationList?.let { it1 -> subList.addAll(it1) } subAdapter.notifyDataSetChanged() regionAdapter.notifyDataSetChanged() } else { subLocationItem?.code = null subLocationItem?.key = null subLocationItem?.value = "定位失败,请稍后再试" subLocationItem?.locationCode = "NotAuth" subAdapter.notifyDataSetChanged() regionAdapter.notifyDataSetChanged() } }, {}) } else { subLocationItem?.code = null subLocationItem?.key = null subLocationItem?.value = "开启授权,获得定位城市" subLocationItem?.locationCode = "NotAuth" subAdapter.notifyDataSetChanged() regionAdapter.notifyDataSetChanged() } } interface OnRegionSelectedListener { fun onRegionSelected(region: RegionItem, sub: SubItem) } }