package com.casic.smarttube.fragment 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.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EmptyView 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 private var isRefresh = false 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) } } } override fun onResume() { super.onResume() groupViewModel.getProGroupList() } private fun bindRecyclerView(it: ProjectGroupModel) { val dataRows = it.data when { isRefresh -> { binding.refreshView.finishRefresh() isRefresh = false groupListAdapter.refresh(dataRows) } else -> { 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.groupNameView) { 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.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() { groupViewModel.loadState.observe(this) { if (isRefresh) { return@observe } when (it) { LoadState.Loading -> LoadingDialog.show(requireActivity(), "数据加载中,请稍后...") LoadState.Success -> { LoadingDialog.dismiss() } LoadState.Fail -> { LoadingDialog.dismiss() "数据加载失败,请重试".show(requireContext()) } } } } override fun initEvent() { binding.refreshView.setOnRefreshListener { isRefresh = true groupViewModel.getProGroupList() } binding.emptyView.setOnClickListener(object : EmptyView.OnClickListener { override fun onReloadButtonClicked() { groupViewModel.getProGroupList() } }) } }