Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / view / GroupDeviceActivity.kt
package com.casic.smarttube.view

import android.os.Handler
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import com.casic.smarttube.R
import com.casic.smarttube.adapter.DeviceListAdapter
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.DeviceListModel
import com.casic.smarttube.utils.DialogHelper
import com.casic.smarttube.vm.ProjectGroupViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.utils.Constant
import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView
import kotlinx.android.synthetic.main.activity_alarm_management.titleView
import kotlinx.android.synthetic.main.activity_group_device.*
import kotlinx.android.synthetic.main.include_empty_view.*

class GroupDeviceActivity : KotlinBaseActivity() {

    private lateinit var groupId: String
    private lateinit var weakReferenceHandler: WeakReferenceHandler
    private lateinit var groupViewModel: ProjectGroupViewModel
    private lateinit var deviceAdapter: DeviceListAdapter
    private var dataBeans: MutableList<DeviceListModel.DataBean> = ArrayList()
    private var pageIndex = 1
    private var isRefresh = false
    private var isLoadMore = false
    private var order = 0

    override fun initLayoutView(): Int = R.layout.activity_group_device

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(false).init()
        ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
        leftBackView.setOnClickListener { finish() }
        titleView.text = "设备列表"
        rightOptionView.setOnClickListener {
            order = if (order == 0) {
                1
            } else {
                0
            }
            pageIndex = 1
            obtainDeviceListByPage()
        }
    }

    override fun initData() {
        groupId = intent.getStringExtra(Constant.INTENT_PARAM)!!

        weakReferenceHandler = WeakReferenceHandler(callback)
        groupViewModel = ViewModelProvider(this).get(ProjectGroupViewModel::class.java)
        obtainDeviceListByPage()
    }

    override fun initEvent() {
        groupDeviceLayout.setOnRefreshListener {
            isRefresh = true
            //刷新之后页码重置
            pageIndex = 1
            obtainDeviceListByPage()
        }
        groupDeviceLayout.setOnLoadMoreListener {
            isLoadMore = true
            pageIndex++
            obtainDeviceListByPage()
        }

        groupViewModel.deviceListModel.observe(this, {
            if (it.code == 200) {
                val dataRows = it.data
                when {
                    isRefresh -> {
                        dataBeans.clear()
                        dataBeans = dataRows!!
                        groupDeviceLayout.finishRefresh()
                        isRefresh = false
                    }
                    isLoadMore -> {
                        if (dataRows?.size == 0) {
                            "到底了,别拉了".show(this)
                        }
                        dataBeans.addAll(dataRows!!)
                        groupDeviceLayout.finishLoadMore()
                        isLoadMore = false
                    }
                    else -> {
                        dataBeans = dataRows!!
                    }
                }
                weakReferenceHandler.sendEmptyMessage(2022070601)
            }
        })

        groupViewModel.loadState.observe(this, {
            when (it) {
                LoadState.Loading -> DialogHelper.showLoadingDialog(this, "数据加载中...")
                else -> DialogHelper.dismissLoadingDialog()
            }
        })
    }

    private fun obtainDeviceListByPage() {
        groupViewModel.obtainDeviceListByPage(groupId, order, pageIndex)
    }

    private val callback = Handler.Callback {
        if (it.what == 2022070601) {
            if (isRefresh || isLoadMore) {
                deviceAdapter.notifyDataSetChanged()
            } else {
                if (dataBeans.size == 0) {
                    emptyView!!.showEmptyPage("这里什么都没有") {
                        pageIndex = 1
                        obtainDeviceListByPage()
                    }
                } else {
                    emptyView!!.hide()
                    deviceAdapter = DeviceListAdapter(this, dataBeans)
                    groupDeviceView!!.layoutManager = LinearLayoutManager(this)
                    groupDeviceView!!.adapter = deviceAdapter
                    deviceAdapter.setOnItemClickListener(object :
                        DeviceListAdapter.OnItemClickListener {
                        override fun onClicked(position: Int) {
                            if (dataBeans[position].devcode.isNullOrBlank()) {
                                "设备编号为空,无法查看历设备详情".show(this@GroupDeviceActivity)
                                return
                            }
                            navigatePageTo<DeviceDetailActivity>(dataBeans[position].tubeId)
                        }

                        override fun onHistoryClicked(position: Int) {
                            if (dataBeans[position].devcode.isNullOrBlank()) {
                                "设备编号为空,无法查看历史数据".show(this@GroupDeviceActivity)
                                return
                            }
                            navigatePageTo<HistoryDataActivity>(dataBeans[position].devcode)
                        }
                    })
                }
            }
        }
        true
    }
}