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.utils.DialogHelper
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 com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
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
    private var clickedPosition = 0

    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 = "当前告警"
        rightOptionView.setOnClickListener {
//            navigatePageTo<SearchAlarmActivity>()
            "尽情期待~".show(this)
        }
    }

    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)
            }
        })

        alarmViewModel.loadState.observe(this, {
            when (it) {
                is LoadState.Loading -> {
                    DialogHelper.showLoadingDialog(this, "处理中,请稍后")
                }
                is LoadState.Success -> {
                    DialogHelper.dismissLoadingDialog()
                    //刷新列表
                    alarmListAdapter.notifyItemRemoved(clickedPosition)
                    dataBeans.removeAt(clickedPosition)
                }
                else -> {
                    DialogHelper.dismissLoadingDialog()
                }
            }
        })
    }

    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)
                        }

                        override fun onOperationClicked(position: Int) {
                            //标记被点击的item位置
                            clickedPosition = position
                            AlertControlDialog.Builder()
                                .setContext(this@AlarmManagementActivity)
                                .setTitle("确认操作")
                                .setMessage("确定取消报警吗?")
                                .setNegativeButton("取消")
                                .setPositiveButton("确定")
                                .setOnDialogButtonClickListener(object :
                                    AlertControlDialog.OnDialogButtonClickListener {
                                    override fun onConfirmClick() {
                                        val alarmId = dataBeans[position].id
                                        if (alarmId.toString().isBlank()) {
                                            "操作失败,告警ID异常".show(this@AlarmManagementActivity)
                                            return
                                        }
                                        alarmViewModel.obtainOperationResult(alarmId!!.toLong())
                                    }

                                    override fun onCancelClick() {

                                    }
                                }).build().show()
                        }
                    })
                }
            }
        }
        true
    }
}