Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / view / AlarmManagementActivity.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.AlarmListAdapter
import com.casic.smarttube.extensions.showEmptyPage
import com.casic.smarttube.model.AlarmListModel
import com.casic.smarttube.vm.AlarmViewModel
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.ImmerseStatusBarUtil
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import kotlinx.android.synthetic.main.activity_alarm_management.*
import kotlinx.android.synthetic.main.activity_alarm_management.leftBackView
import kotlinx.android.synthetic.main.activity_alarm_management.titleView
import kotlinx.android.synthetic.main.include_base_title.*
import kotlinx.android.synthetic.main.include_empty_view.*


class AlarmManagementActivity : KotlinBaseActivity() {

    private lateinit var alarmViewModel: AlarmViewModel
    private lateinit var weakReferenceHandler: WeakReferenceHandler
    private lateinit var alarmListAdapter: AlarmListAdapter
    private var dataBeans: MutableList<AlarmListModel.DataBean.RowsBean> = ArrayList()
    private var pageIndex = 1
    private var isRefresh = false
    private var isLoadMore = false

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

    override fun setupTopBarLayout() {
        ImmersionBar.with(this).statusBarDarkFont(false).init()
        ImmerseStatusBarUtil.setColor(this, R.color.mainThemeColor.convertColor(this))
        leftBackView.setOnClickListener { finish() }
        titleView.text = "当前告警"
    }

    override fun initData() {
        weakReferenceHandler = WeakReferenceHandler(callback)
        alarmViewModel = ViewModelProvider(this).get(AlarmViewModel::class.java)
    }

    override fun onResume() {
        obtainAlarmListByPage()
        super.onResume()
    }

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

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

    private fun obtainAlarmListByPage() {
        alarmViewModel.obtainAlarmListByPage("", "", "", "", "", "", "1", pageIndex)
    }

    private val callback = Handler.Callback {
        if (it.what == 2022062501) {
            if (isRefresh || isLoadMore) {
                alarmListAdapter.notifyDataSetChanged()
            } else { //首次加载数据
                if (dataBeans.size == 0) {
                    emptyView!!.showEmptyPage {
                        pageIndex = 1
                        obtainAlarmListByPage()
                    }
                } else {
                    emptyView!!.hide()
                    alarmListAdapter = AlarmListAdapter(this, dataBeans)
                    alarmListView!!.layoutManager = LinearLayoutManager(this)
                    alarmListView!!.adapter = alarmListAdapter
                    alarmListAdapter.setOnItemClickListener(object :
                        AlarmListAdapter.OnItemClickListener {
                        override fun onClicked(position: Int) {
                            val wellId = dataBeans[position].wellId.toString()
                            if (wellId.isBlank()) {
                                "井编号异常,无法查看详情".show(this@AlarmManagementActivity)
                                return
                            }
                            navigatePageTo<WellDetailActivity>(wellId)
                        }
                    })
                }
            }
        }
        true
    }
}