package com.casic.smarttube.view import android.os.Bundle import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.casic.smarttube.R import com.casic.smarttube.adapter.DeviceListAdapter import com.casic.smarttube.databinding.ActivityGroupDeviceBinding import com.casic.smarttube.extensions.initImmersionBar import com.casic.smarttube.model.DeviceListModel import com.casic.smarttube.utils.LocaleConstant import com.casic.smarttube.vm.DeviceViewModel import com.casic.smarttube.vm.ProjectGroupViewModel import com.casic.smarttube.widgets.MultiSelectDialog import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.dp2px import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.utils.ActivityStackManager import com.pengxh.kt.lite.utils.LiteKitConstant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialog import com.pengxh.kt.lite.widget.EasyPopupWindow import com.pengxh.kt.lite.widget.TitleBarView import com.pengxh.kt.lite.widget.dialog.AlertControlDialog import com.qmuiteam.qmui.recyclerView.QMUIRVItemSwipeAction import com.qmuiteam.qmui.recyclerView.QMUISwipeAction class GroupDeviceActivity : KotlinBaseActivity<ActivityGroupDeviceBinding>() { private lateinit var groupId: String private lateinit var groupViewModel: ProjectGroupViewModel private lateinit var deviceViewModel: DeviceViewModel private lateinit var deviceAdapter: DeviceListAdapter private val context = this private val easyPopupWindow by lazy { EasyPopupWindow(this) } private val marginOffsets by lazy { 6.dp2px(this) } private var dataRows: MutableList<DeviceListModel.DataModel> = ArrayList() private var page = 1 private var isRefresh = false private var isLoadMore = false private var order = 0 private var clickedPosition = 0 private var isDeleteAll = false override fun initViewBinding(): ActivityGroupDeviceBinding { return ActivityGroupDeviceBinding.inflate(layoutInflater) } override fun setupTopBarLayout() { binding.rootView.initImmersionBar(this, false, R.color.mainThemeColor) binding.titleView.setOnClickListener(object : TitleBarView.OnClickListener { override fun onLeftClick() { finish() } override fun onRightClick() { easyPopupWindow.showAsDropDown(binding.titleView, binding.titleView.width, 0) } }) } override fun initOnCreate(savedInstanceState: Bundle?) { ActivityStackManager.addActivity(this) groupId = intent.getStringExtra(LiteKitConstant.INTENT_PARAM_KEY)!! binding.titleView.setTitle(String.format(groupId + "项目设备列表")) groupViewModel = ViewModelProvider(this)[ProjectGroupViewModel::class.java] groupViewModel.deviceListData.observe(this) { if (it.code == 200) { bindRecyclerView(it) } } getDeviceListByPage() deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] deviceViewModel.deleteResultData.observe(this) { if (it.code == 200) { if (isDeleteAll) { dataRows.clear() deviceAdapter.notifyItemMoved(0, dataRows.size) deviceAdapter.notifyItemRangeChanged(0, dataRows.size) } else { dataRows.removeAt(clickedPosition) deviceAdapter.notifyItemRemoved(clickedPosition) deviceAdapter.notifyItemRangeChanged( clickedPosition, dataRows.size - clickedPosition ) } if (dataRows.size == 0) { binding.emptyView.visibility = View.VISIBLE binding.recyclerView.visibility = View.GONE } } } val menuItems = ArrayList<EasyPopupWindow.MenuItem>().apply { add( EasyPopupWindow.MenuItem( LocaleConstant.DEVICE_OPERATE_IMAGES[0], LocaleConstant.DEVICE_OPERATE_TITLES[0] ) ) add( EasyPopupWindow.MenuItem( LocaleConstant.DEVICE_OPERATE_IMAGES[1], LocaleConstant.DEVICE_OPERATE_TITLES[1] ) ) add( EasyPopupWindow.MenuItem( LocaleConstant.DEVICE_OPERATE_IMAGES[2], LocaleConstant.DEVICE_OPERATE_TITLES[2] ) ) add( EasyPopupWindow.MenuItem( LocaleConstant.DEVICE_OPERATE_IMAGES[3], LocaleConstant.DEVICE_OPERATE_TITLES[3] ) ) } easyPopupWindow.set(menuItems, object : EasyPopupWindow.OnPopupWindowClickListener { override fun onPopupItemClicked(position: Int) { when (position) { 0 -> { navigatePageTo<GroupDeviceMapActivity>(groupId) } 1 -> { order = if (order == 0) { 1 } else { 0 } page = 1 getDeviceListByPage() } 2 -> { AlertControlDialog.Builder().setContext(context).setTitle("提示") .setMessage("删除后将无法恢复,是否继续?") .setNegativeButton("容我想想").setPositiveButton("已经想好") .setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onCancelClick() { } override fun onConfirmClick() { val ids = ArrayList<Long>() dataRows.forEach { if (!it.deviceId.isNullOrBlank()) { ids.add(it.deviceId.toLong()) } } isDeleteAll = true deviceViewModel.deleteDeviceById(context, ids) } }).build().show() } 3 -> { MultiSelectDialog.Builder().setContext(this@GroupDeviceActivity) .setTitle("选择设备").setDataSource(dataRows) .setNegativeButton("取消").setPositiveButton("选好了") .setOnDialogButtonClickListener(object : MultiSelectDialog.OnDialogButtonClickListener { override fun onConfirmClick(selectedModels: MutableList<DeviceListModel.DataModel>) { val ids = ArrayList<Long>() selectedModels.forEach { if (!it.deviceId.isNullOrBlank()) { ids.add(it.deviceId.toLong()) } } isDeleteAll = true deviceViewModel.deleteDeviceById(context, ids) } override fun onCancelClick() { } }).build().show() } } } }) } private fun bindRecyclerView(result: DeviceListModel) { dataRows = result.data!! when { isRefresh -> { binding.refreshView.finishRefresh() isRefresh = false deviceAdapter.refresh(dataRows) } isLoadMore -> { binding.refreshView.finishLoadMore() isLoadMore = false if (dataRows.size == 0) { "到底了,别拉了".show(this) } deviceAdapter.loadMore(dataRows) } else -> { 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 deviceAdapter = DeviceListAdapter(this, dataRows) //绑定侧滑事件 swipeAction.attachToRecyclerView(binding.recyclerView) val linearLayoutManager = object : LinearLayoutManager(this) { override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams { return RecyclerView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT ) } } binding.recyclerView.layoutManager = linearLayoutManager binding.recyclerView.addItemDecoration( RecyclerViewItemOffsets( marginOffsets, marginOffsets shr 1, marginOffsets, marginOffsets shr 1 ) ) binding.recyclerView.adapter = deviceAdapter deviceAdapter.setOnItemClickListener(object : DeviceListAdapter.OnItemClickListener { override fun onClicked(item: DeviceListModel.DataModel) { if (item.devcode.isNullOrBlank()) { "设备编号为空,无法查看设备详情".show(context) return } navigatePageTo<DeviceDetailActivity>(arrayListOf(groupId, item.devcode)) } override fun onHistoryClicked(item: DeviceListModel.DataModel) { if (item.devcode.isNullOrBlank()) { "设备编号为空,无法查看历史数据".show(context) return } navigatePageTo<HistoryDataActivity>(arrayListOf(groupId, item.devcode)) } }) } } } } override fun observeRequestState() { groupViewModel.loadState.observe(this) { if (isRefresh || isLoadMore) { return@observe } when (it) { LoadState.Loading -> LoadingDialog.show(this, "数据加载中...") else -> LoadingDialog.dismiss() } } } override fun initEvent() { binding.refreshView.setOnRefreshListener { isRefresh = true //刷新之后页码重置 page = 1 getDeviceListByPage() } binding.refreshView.setOnLoadMoreListener { isLoadMore = true page++ getDeviceListByPage() } } private fun getDeviceListByPage() { groupViewModel.getDeviceListByPage(this, groupId, order, page) } private val swipeAction = QMUIRVItemSwipeAction(true, object : QMUIRVItemSwipeAction.Callback() { //滑动拉出菜单删除 override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { clickedPosition = viewHolder.bindingAdapterPosition //删除数据库里对应的数据 val deviceId = dataRows[clickedPosition].deviceId if (deviceId.isNullOrBlank()) { "管盯ID错误,不可删除,请检查数据源".show(context) return } isDeleteAll = false deviceViewModel.deleteDeviceById(context, arrayListOf(deviceId.toLong())) } override fun getSwipeDirection( recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder ): Int { return QMUIRVItemSwipeAction.SWIPE_LEFT } //滑动拉出菜单,点击删除 override fun onClickAction( swipeAction: QMUIRVItemSwipeAction?, selected: RecyclerView.ViewHolder?, action: QMUISwipeAction? ) { super.onClickAction(swipeAction, selected, action) deleteItem(selected!!.bindingAdapterPosition) } }) private fun deleteItem(adapterPosition: Int) { AlertControlDialog.Builder().setContext(this).setTitle("提示") .setMessage("删除后将无法恢复,是否继续?").setNegativeButton("容我想想") .setPositiveButton("已经想好").setOnDialogButtonClickListener(object : AlertControlDialog.OnDialogButtonClickListener { override fun onCancelClick() { } override fun onConfirmClick() { clickedPosition = adapterPosition //删除数据库里对应的数据 val deviceId = dataRows[clickedPosition].deviceId if (deviceId.isNullOrBlank()) { "管盯ID错误,不可删除,请检查数据源".show(context) return } isDeleteAll = false deviceViewModel.deleteDeviceById(context, arrayListOf(deviceId.toLong())) } }).build().show() } }