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