Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / fragment / OverviewFragment.kt
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()
            }
        })
    }
}