package com.casic.smarttube.fragment import android.graphics.Color import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider import com.amap.api.services.core.LatLonPoint import com.amap.api.services.geocoder.GeocodeResult import com.amap.api.services.geocoder.GeocodeSearch import com.amap.api.services.geocoder.RegeocodeQuery import com.amap.api.services.geocoder.RegeocodeResult import com.casic.smarttube.R import com.casic.smarttube.databinding.FragmentOverviewBinding import com.casic.smarttube.model.ProjectGroupModel import com.casic.smarttube.view.GroupDeviceActivity import com.casic.smarttube.vm.ProjectGroupViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.divider.RecyclerViewItemDivider import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.widget.EmptyView import com.pengxh.kt.lite.widget.TitleBarView import com.pengxh.kt.lite.widget.dialog.AlertInputDialog class OverviewFragment : KotlinBaseFragment<FragmentOverviewBinding>() { private val kTag = "OverviewFragment" private val geocoderSearch by lazy { GeocodeSearch(requireContext()) } private lateinit var groupViewModel: ProjectGroupViewModel private lateinit var groupListAdapter: NormalRecyclerAdapter<ProjectGroupModel.DataModel> private var clickedPosition = 0 override fun initViewBinding( inflater: LayoutInflater, container: ViewGroup? ): FragmentOverviewBinding { return FragmentOverviewBinding.inflate(inflater, container, false) } override fun setupTopBarLayout() { } override fun initOnCreate(savedInstanceState: Bundle?) { groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java] groupViewModel.groupModel.observe(this) { if (it.code == 200) { bindRecyclerView(it) } } groupViewModel.changeGroupResult.observe(this) { if (it.code == 200) { groupListAdapter.notifyItemChanged(clickedPosition) } } groupViewModel.getGroupList() } private fun bindRecyclerView(it: ProjectGroupModel) { val dataRows = it.data if (dataRows.size == 0) { binding.emptyView.visibility = View.VISIBLE binding.recyclerView.visibility = View.GONE } else { binding.emptyView.visibility = View.GONE binding.recyclerView.visibility = View.VISIBLE groupListAdapter = object : NormalRecyclerAdapter<ProjectGroupModel.DataModel>( R.layout.item_group_over_view_rv_l, it.data ) { override fun convertView( viewHolder: ViewHolder, position: Int, item: ProjectGroupModel.DataModel ) { viewHolder.setText(R.id.groupNameView, item.groupId) .setText(R.id.totalDeviceNumView, item.totalDevice) .setText(R.id.inUseDeviceNumView, item.alive) .setText(R.id.notUseDeviceNumView, item.unalive) .setOnClickListener(R.id.editGroupNameView) { clickedPosition = position editGroupName(item) } if (item.latGaode.isBlank() || item.lngGaode.isBlank()) { viewHolder.setText(R.id.groupLocationView, "经纬度异常,无法查看具体位置") } else { val point = LatLonPoint(item.latGaode.toDouble(), item.lngGaode.toDouble()) val queryParam = RegeocodeQuery(point, 200f, GeocodeSearch.AMAP) geocoderSearch.getFromLocationAsyn(queryParam) geocoderSearch.setOnGeocodeSearchListener(object : GeocodeSearch.OnGeocodeSearchListener { override fun onRegeocodeSearched(result: RegeocodeResult?, rCode: Int) { if (rCode == 1000) { viewHolder.setText( R.id.groupLocationView, String.format("${result?.regeocodeAddress?.formatAddress}") ) } } override fun onGeocodeSearched(result: GeocodeResult?, rCode: Int) { } }) } } } binding.recyclerView.addItemDecoration( RecyclerViewItemDivider(0f, 0f, Color.LTGRAY) ) binding.recyclerView.adapter = groupListAdapter groupListAdapter.setOnItemClickedListener(object : NormalRecyclerAdapter.OnItemClickedListener<ProjectGroupModel.DataModel> { override fun onItemClicked(position: Int, item: ProjectGroupModel.DataModel) { requireContext().navigatePageTo<GroupDeviceActivity>(item.groupId) } }) } } private fun editGroupName(item: ProjectGroupModel.DataModel) { AlertInputDialog.Builder() .setContext(requireContext()) .setTitle("提示") .setHintMessage("请输入新的项目名") .setNegativeButton("取消") .setPositiveButton("确定") .setOnDialogButtonClickListener(object : AlertInputDialog.OnDialogButtonClickListener { override fun onCancelClick() { } override fun onConfirmClick(value: String) { item.groupId = value groupViewModel.changeGroupId(item.groupId, value) } }).build().show() } override fun observeRequestState() { binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { override fun onLeftClick() { } override fun onRightClick() { groupViewModel.getProGroupList() } }) } override fun initEvent() { binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { override fun onReloadButtonClicked() { groupViewModel.getProGroupList() } }) } }