|
|
@@ -0,0 +1,178 @@
|
|
|
+package com.grkj.iscs.features.main.fragment.hardware_manage
|
|
|
+
|
|
|
+import android.widget.LinearLayout
|
|
|
+import androidx.core.view.isVisible
|
|
|
+import androidx.fragment.app.viewModels
|
|
|
+import com.drake.brv.BindingAdapter
|
|
|
+import com.drake.brv.annotaion.DividerOrientation
|
|
|
+import com.drake.brv.utils.dividerSpace
|
|
|
+import com.drake.brv.utils.linear
|
|
|
+import com.drake.brv.utils.models
|
|
|
+import com.drake.brv.utils.setup
|
|
|
+import com.google.android.flexbox.AlignItems
|
|
|
+import com.google.android.flexbox.FlexDirection
|
|
|
+import com.google.android.flexbox.FlexboxLayoutManager
|
|
|
+import com.google.android.flexbox.JustifyContent
|
|
|
+import com.grkj.iscs.R
|
|
|
+import com.grkj.iscs.databinding.FragmentSlotsManageBinding
|
|
|
+import com.grkj.iscs.databinding.ItemDeviceRegistrationKeyBinding
|
|
|
+import com.grkj.iscs.databinding.ItemDeviceRegistrationKeyLayoutBinding
|
|
|
+import com.grkj.iscs.databinding.ItemDeviceRegistrationLockBinding
|
|
|
+import com.grkj.iscs.databinding.ItemDeviceRegistrationLockLayoutBinding
|
|
|
+import com.grkj.iscs.databinding.ItemDeviceSlotManageKeyBinding
|
|
|
+import com.grkj.iscs.databinding.ItemDeviceSlotManageLockBinding
|
|
|
+import com.grkj.iscs.features.init.model.DockData
|
|
|
+import com.grkj.iscs.features.main.viewmodel.hardware_manage.SlotsManageViewModel
|
|
|
+import com.grkj.ui_base.base.BaseFragment
|
|
|
+import com.grkj.ui_base.utils.modbus.DeviceConst
|
|
|
+import com.grkj.ui_base.utils.modbus.DockBean
|
|
|
+import com.grkj.ui_base.utils.modbus.ModBusController
|
|
|
+import com.sik.sikcore.extension.setDebouncedClickListener
|
|
|
+import dagger.hilt.android.AndroidEntryPoint
|
|
|
+
|
|
|
+/**
|
|
|
+ * 仓位管理
|
|
|
+ */
|
|
|
+@AndroidEntryPoint
|
|
|
+class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
|
|
|
+ private val viewModel: SlotsManageViewModel by viewModels()
|
|
|
+ override fun getLayoutId(): Int {
|
|
|
+ return R.layout.fragment_slots_manage
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun initView() {
|
|
|
+ binding.back.setDebouncedClickListener {
|
|
|
+ viewModel.unregisterStatusListener()
|
|
|
+ navController.popBackStack()
|
|
|
+ }
|
|
|
+ binding.dockRv.linear().dividerSpace(10, DividerOrientation.GRID).setup {
|
|
|
+ addType<DockData.KeyDock>(R.layout.item_device_registration_key_layout)
|
|
|
+ addType<DockData.LockDock>(R.layout.item_device_registration_lock_layout)
|
|
|
+ addType<DockData.PortableDock>(R.layout.item_device_registration_portable_layout)
|
|
|
+ onBind {
|
|
|
+ when (val model = getModel<Any>()) {
|
|
|
+ is DockData.KeyDock -> {
|
|
|
+ onKeyDockRVListBinding(model)
|
|
|
+ }
|
|
|
+
|
|
|
+ is DockData.LockDock -> {
|
|
|
+ onLockDockRVListBinding(model)
|
|
|
+ }
|
|
|
+
|
|
|
+ is DockData.PortableDock -> {
|
|
|
+ onPortableDockRVListBinding(model)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onKeyDockRVListBinding(
|
|
|
+ keyDock: DockData.KeyDock,
|
|
|
+ ) {
|
|
|
+ val itemBinding = getBinding<ItemDeviceRegistrationKeyLayoutBinding>()
|
|
|
+ itemBinding.rvKeyLayout.layoutManager = FlexboxLayoutManager(context).apply {
|
|
|
+ flexDirection = FlexDirection.ROW // 横向
|
|
|
+ justifyContent = JustifyContent.SPACE_EVENLY // 等间距居中
|
|
|
+ alignItems = AlignItems.CENTER // 垂直居中对齐
|
|
|
+ }
|
|
|
+ itemBinding.rvKeyLayout.linear(LinearLayout.HORIZONTAL)
|
|
|
+ .setup {
|
|
|
+ addType<DockBean.KeyBean>(R.layout.item_device_slot_manage_key)
|
|
|
+ onBind {
|
|
|
+ val itemKeyBinding = getBinding<ItemDeviceSlotManageKeyBinding>()
|
|
|
+ val itemKey = getModel<DockBean.KeyBean>()
|
|
|
+ itemKeyBinding.ivKey.isSelected = itemKey.isExist
|
|
|
+ }
|
|
|
+ }.models = keyDock.keyData
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onLockDockRVListBinding(
|
|
|
+ lockDock: DockData.LockDock,
|
|
|
+ ) {
|
|
|
+ val itemBinding = getBinding<ItemDeviceRegistrationLockLayoutBinding>()
|
|
|
+ itemBinding.rvLockLayout.layoutManager = FlexboxLayoutManager(context).apply {
|
|
|
+ flexDirection = FlexDirection.ROW // 横向
|
|
|
+ justifyContent = JustifyContent.SPACE_EVENLY // 等间距居中
|
|
|
+ alignItems = AlignItems.CENTER // 垂直居中对齐
|
|
|
+ }
|
|
|
+ itemBinding.rvLockLayout.linear(LinearLayout.HORIZONTAL)
|
|
|
+ .setup {
|
|
|
+ addType<DockBean.LockBean>(R.layout.item_device_slot_manage_lock)
|
|
|
+ onBind {
|
|
|
+ val itemLockBinding = getBinding<ItemDeviceSlotManageLockBinding>()
|
|
|
+ val itemLock = getModel<DockBean.LockBean>()
|
|
|
+ itemLockBinding.root.isSelected = itemLock.isExist
|
|
|
+ }
|
|
|
+ }.models = lockDock.lockData
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onPortableDockRVListBinding(
|
|
|
+ portableDock: DockData.PortableDock,
|
|
|
+ ) {
|
|
|
+ val itemBinding = getBinding<ItemDeviceRegistrationKeyLayoutBinding>()
|
|
|
+ itemBinding.rvKeyLayout.layoutManager = FlexboxLayoutManager(context).apply {
|
|
|
+ flexDirection = FlexDirection.ROW // 横向
|
|
|
+ justifyContent = JustifyContent.SPACE_EVENLY // 等间距居中
|
|
|
+ alignItems = AlignItems.CENTER // 垂直居中对齐
|
|
|
+ }
|
|
|
+ itemBinding.rvKeyLayout.linear(LinearLayout.HORIZONTAL)
|
|
|
+ .setup {
|
|
|
+ addType<DockBean.LockBean>(R.layout.item_device_slot_manage_lock)
|
|
|
+ addType<DockBean.KeyBean>(R.layout.item_device_slot_manage_key)
|
|
|
+ onBind {
|
|
|
+ when (val itemPortable = getModel<Any>()) {
|
|
|
+ is DockBean.KeyBean -> {
|
|
|
+ val itemKeyBinding = getBinding<ItemDeviceSlotManageKeyBinding>()
|
|
|
+ itemKeyBinding.ivKey.isSelected = itemPortable.isExist
|
|
|
+ }
|
|
|
+
|
|
|
+ is DockBean.LockBean -> {
|
|
|
+ val itemLockBinding = getBinding<ItemDeviceSlotManageLockBinding>()
|
|
|
+ itemLockBinding.root.isSelected = itemPortable.isExist
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }.models = portableDock.deviceData
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun initData() {
|
|
|
+ super.initData()
|
|
|
+ viewModel.registerStatusListener {
|
|
|
+ getData()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取并加载数据
|
|
|
+ */
|
|
|
+ private fun getData() {
|
|
|
+ val dockData =
|
|
|
+ ModBusController.dockList.filter { it.type == DeviceConst.DOCK_TYPE_LOCK || it.type == DeviceConst.DOCK_TYPE_KEY || it.type == DeviceConst.DOCK_TYPE_PORTABLE }
|
|
|
+ val keyDock = dockData.filter { it.type == DeviceConst.DOCK_TYPE_KEY }.map {
|
|
|
+ DockData.KeyDock().apply {
|
|
|
+ keyData.addAll(it.deviceList.filterIsInstance<DockBean.KeyBean>())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ val keyDatas = keyDock.map { it.keyData }.flatten()
|
|
|
+ val newKeyDock = DockData.KeyDock()
|
|
|
+ newKeyDock.keyData.addAll(keyDatas)
|
|
|
+ val newKeyDockList = newKeyDock.keyData.chunked(4).map { subList ->
|
|
|
+ DockData.KeyDock().apply { keyData.addAll(subList) }
|
|
|
+ }
|
|
|
+ val lockDock = dockData.filter { it.type == DeviceConst.DOCK_TYPE_LOCK }.map {
|
|
|
+ DockData.LockDock().apply {
|
|
|
+ lockData.addAll(it.deviceList.filterIsInstance<DockBean.LockBean>())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ val portableDock =
|
|
|
+ dockData.filter { it.type == DeviceConst.DOCK_TYPE_PORTABLE }.map {
|
|
|
+ DockData.PortableDock().apply {
|
|
|
+ deviceData.addAll(it.deviceList.toList())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ binding.dockRv.models = newKeyDockList + portableDock + lockDock
|
|
|
+ }
|
|
|
+
|
|
|
+}
|