فهرست منبع

fix 支持长按解锁订单+锁单后退刷新状态显示

RobinTan1024 4 سال پیش
والد
کامیت
d2660deb01

+ 9 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/adapter/OrderListAdapter.kt

@@ -10,7 +10,8 @@ import kotlinx.android.synthetic.main.adapter_order_item.view.*
 
 class OrderListAdapter(
     private val orderList: List<DeviceClass>,
-    private val handler: (dc: DeviceClass) -> Unit
+    // value of `type` is 0 when item is clicked and 1 when it's long pressed
+    private val handler: (dc: DeviceClass, type: Int, position: Int) -> Unit
 ) : RecyclerView.Adapter<OrderListAdapter.OrderListViewHolder>() {
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderListViewHolder {
@@ -26,7 +27,13 @@ class OrderListAdapter(
         holder.itemView.amount.text = StringUtil.get(R.string.amount_rmb, order.amount.toString())
         holder.itemView.volume.text = StringUtil.get(R.string.volume_l, order.volume.toString())
         holder.itemView.orderBox.setOnClickListener {
-            handler(order)
+            handler(order, 0, position)
+        }
+        if (order.isLock) {
+            holder.itemView.orderBox.setOnLongClickListener {
+                handler(order, 1, position)
+                true
+            }
         }
 
         when {

+ 21 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentOrderList.kt

@@ -36,6 +36,7 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
     private val orderList = arrayListOf<DeviceClass>()
     private val orderListAfterFilter = arrayListOf<DeviceClass>()
     private val orderListAdapter = OrderListAdapter(if (pumpId != -1) orderList else orderListAfterFilter, this::selectOrder)
+    private var selectedPosition: Int? = null
 
     private var selectedName = ""
     private val oilNameList = FusionManager.pumpList.map { it.oilName }.filter { it.isNotBlank() }
@@ -71,22 +72,40 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
             setToolBar(binding.fragmentToolbar)
         }
 
+        // Adapter has to update if dc is changed in FragmentPayType and route back.
+        selectedPosition?.let { orderListAdapter.notifyItemChanged(it) }
+
         return binding.root
     }
 
-    private fun selectOrder(dc: DeviceClass) {
+    private fun selectOrder(dc: DeviceClass, type: Int, position: Int) {
         lifecycleScope.launch {
             when {
                 dc.releaseTokenElement == null || dc.releaseTokenAttribute == null -> {
                     DFSToastUtil.fail(R.string.wrong_order_info)
                 }
-                else -> {
+                type == 0 -> {
                     if (dc.isLock && !SPUtil.isLockByThis(dc)) {
                         DFSToastUtil.warn(R.string.order_lock_by_other)
                     } else {
+                        selectedPosition = position
                         (activity as MainActivity).setFragment(FragmentPayType.build(dc), true)
                     }
                 }
+                type == 1 && dc.isLock -> {
+                    if (SPUtil.isLockByThis(dc)) {
+                        val result = FusionManager.lockOrder(dc, false)
+                        if (result.success) {
+                            dc.state = "Payable"
+                            orderListAdapter.notifyItemChanged(position)
+                            DFSToastUtil.success(R.string.unlock_order_success)
+                        } else {
+                            DFSToastUtil.fail(R.string.fail_unlock_order)
+                        }
+                    } else {
+                        DFSToastUtil.warn(R.string.cant_unlock_others)
+                    }
+                }
             }
         }
     }

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -107,6 +107,7 @@
     <string name="in_process_order">正在处理订单&#8230;</string>
     <string name="in_get_order">正在获取最新的订单数据&#8230;</string>
     <string name="fail_unlock_order">解锁订单失败</string>
+    <string name="unlock_order_success">解锁订单成功</string>
     <string name="fail_clear_order">消单失败</string>
     <string name="fail_lock_order">锁单失败</string>
     <string name="unlock_order">解锁订单</string>
@@ -124,6 +125,7 @@
     <string name="amount_pay">需付金额 ¥%1$s</string>
     <string name="in_pay">订单支付中&#8230;</string>
     <string name="order_lock_by_other">订单已被其他渠道锁定</string>
+    <string name="cant_unlock_others">不能解锁其它设备锁定的订单</string>
 
     <string name="init_scanner">初始化扫描器</string>
     <string name="plz_check_scanner">请检查扫描器是否连接正常</string>