Ver código fonte

调整外置rfid学习机制,修复部分视图,历史bug修复

1.settingactivity调整外置HIB读卡器学习策略,避免传入enter后触发保存重启问题;
2.存储时因为单个化学品存储,调整绑定rfid视图,填写完信息后直接扫描rfid即可,提交时调用aio/checkrfid相关接口去重;
3.修复标签管理页面->绑定/更换rfid时showNerError getMEssage()失败的问题,调整为显示toast,更易于用户理解;
4.调整标签管理列表页视图,保证rfid编号长度能完整展示。
stoney 1 semana atrás
pai
commit
eabcfdf58f

+ 25 - 3
app/src/main/java/xn/hxp/receiver/UhfRfidManager.kt

@@ -86,6 +86,11 @@ object UhfRfidManager {
         learningCallback = callback
     }
 
+    fun stopLearning() {
+        isLearning = false
+        learningCallback = null
+    }
+
     fun isPageWhitelisted(context: Context, pageTag: String): Boolean {
         return getWhitelist(context).contains(pageTag)
     }
@@ -109,10 +114,10 @@ object UhfRfidManager {
     fun handleLearningEvent(context: Context, event: KeyEvent): Boolean {
         if (!isLearning) return false
         val device = event.device ?: return false
-        // 只在ACTION_DOWN时处理,避免重复
+        // 学习期间统一消费设备按键,避免触发页面按钮导致误操作或重启
+        if (!isCandidateLearningDevice(device, event)) return true
+        // 只在ACTION_DOWN时记录,避免重复
         if (event.action != KeyEvent.ACTION_DOWN) return true
-        // 忽略内置虚拟键盘设备
-        if (!device.isExternal) return false
 
         val vendorId = device.vendorId
         val productId = device.productId
@@ -124,4 +129,21 @@ object UhfRfidManager {
         learningCallback = null
         return true
     }
+
+    /**
+     * 允许学习的候选设备:
+     * 1. 明确标记为 external 的输入设备
+     * 2. 或具备 vendorId / productId 的 HID 键盘类设备
+     *
+     * 不再强依赖 isExternal,避免部分 Android 设备把 USB HID 识别成普通键盘导致学习失败。
+     */
+    private fun isCandidateLearningDevice(device: InputDevice, event: KeyEvent): Boolean {
+        if (device.isVirtual) return false
+
+        val hasVidPid = device.vendorId > 0 || device.productId > 0
+        val keyboardLike = device.sources and InputDevice.SOURCE_KEYBOARD == InputDevice.SOURCE_KEYBOARD
+        val validKey = event.keyCode != KeyEvent.KEYCODE_UNKNOWN
+
+        return device.isExternal || (hasVidPid && keyboardLike && validKey)
+    }
 }

+ 25 - 5
app/src/main/java/xn/hxp/ui/SettingActivity.java

@@ -32,6 +32,7 @@ import xn.hxp.weidith.ble.BleSelectorDialog;
 public class SettingActivity extends BaseActivity {
 
     private ActivitySettingBinding binding;
+    private boolean uhfLearningMode = false;
 
     @Override
     protected ViewBinding setViewBinding() {
@@ -117,14 +118,26 @@ public class SettingActivity extends BaseActivity {
 
         // 重新学习按钮
         binding.uhfLearnBT.setOnClickListener(v -> {
+            uhfLearningMode = true;
+            binding.save.setEnabled(false);
             UhfRfidManager.INSTANCE.startLearning(deviceName -> {
                 runOnUiThread(() -> {
+                    uhfLearningMode = false;
+                    binding.save.setEnabled(true);
                     updateUhfDeviceInfo();
                     showToast("设备学习成功: " + deviceName);
                 });
                 return null;
             });
             showToast("请在外置读卡器上刷一次卡...");
+            binding.uhfLearnBT.postDelayed(() -> {
+                if (uhfLearningMode && UhfRfidManager.INSTANCE.isLearning()) {
+                    uhfLearningMode = false;
+                    binding.save.setEnabled(true);
+                    UhfRfidManager.INSTANCE.stopLearning();
+                    showToast("未识别到可学习的外置读卡器事件,请确认设备为HID键盘模式");
+                }
+            }, 10000);
         });
 
         // 清除配置按钮
@@ -170,15 +183,22 @@ public class SettingActivity extends BaseActivity {
     @Override
     public boolean dispatchKeyEvent(KeyEvent event) {
         // 学习模式下拦截外部设备的KeyEvent
-        if (UhfRfidManager.INSTANCE.isLearning()) {
-            if (UhfRfidManager.INSTANCE.handleLearningEvent(this, event)) {
-                return true;
-            }
+        if (uhfLearningMode || UhfRfidManager.INSTANCE.isLearning()) {
+            UhfRfidManager.INSTANCE.handleLearningEvent(this, event);
+            return true;
         }
         return super.dispatchKeyEvent(event);
     }
 
     @Override
+    protected void onDestroy() {
+        uhfLearningMode = false;
+        binding.save.setEnabled(true);
+        UhfRfidManager.INSTANCE.stopLearning();
+        super.onDestroy();
+    }
+
+    @Override
     public void onBackPressed() {
     }
 
@@ -219,4 +239,4 @@ public class SettingActivity extends BaseActivity {
     protected void cdTime(int cd) {
 
     }
-}
+}

+ 1 - 2
app/src/main/java/xn/hxp/ui/adapter/LabelDialogAdapter.kt

@@ -40,5 +40,4 @@ class LabelDialogAdapter :
 
     }
 
-
-}
+}

+ 2 - 1
app/src/main/java/xn/hxp/ui/adapter/PrintLabelAdapter.kt

@@ -14,10 +14,11 @@ class PrintLabelAdapter :
     }
 
     init {
-        addChildClickViewIds(R.id.imgDelete, R.id.rescanBtn)
+        addChildClickViewIds(R.id.rescanBtn)
     }
 
     override fun convert(holder: BaseViewHolder, item: StockDetailsModel) {
+        holder.setText(R.id.no, item.no.toString())
         holder.setText(R.id.tagCode, item.tagCode ?: "")
         val rfidView = holder.getView<TextView>(R.id.rfidCode)
         val rfid = item.rfidCode?.trim().orEmpty()

+ 16 - 2
app/src/main/java/xn/hxp/ui/still/ChemicalsAlsoActivity.kt

@@ -379,12 +379,26 @@ class ChemicalsAlsoActivity : BaseActivity() {
             mHandleScanEvent = false
         }, { throwable ->
             dismissLoading()
-            showNetError(throwable)
+            val errorMsg = resolveErrorMessage(throwable, "更换失败")
+            customDialogView(2, errorMsg)
+            showToast(errorMsg)
 
         })
         addDisposable(disposable)
     }
 
+    private fun resolveErrorMessage(throwable: Throwable?, defaultMsg: String): String {
+        val message = throwable?.message?.trim()
+        if (!message.isNullOrEmpty()) {
+            return message
+        }
+        val localizedMessage = throwable?.localizedMessage?.trim()
+        if (!localizedMessage.isNullOrEmpty()) {
+            return localizedMessage
+        }
+        return defaultMsg
+    }
+
 
     //验证方式
     private fun verifyChecking() {
@@ -1623,4 +1637,4 @@ class ChemicalsAlsoActivity : BaseActivity() {
             else -> null
         }?.let { customDialogView(2, "$it") }
     }
-}
+}

+ 16 - 2
app/src/main/java/xn/hxp/ui/warehousing/ChemicalLabelingActivity.kt

@@ -455,12 +455,26 @@ class ChemicalLabelingActivity : BaseActivity() {
             mAdapter.notifyItemChanged(mAdIndex)
         }, { throwable ->
             dismissLoading()
-            showNetError(throwable)
+            val errorMsg = resolveErrorMessage(throwable, "更换失败")
+            customDialogView(2, errorMsg)
+            showToast(errorMsg)
 
         })
         addDisposable(disposable)
     }
 
+    private fun resolveErrorMessage(throwable: Throwable?, defaultMsg: String): String {
+        val message = throwable?.message?.trim()
+        if (!message.isNullOrEmpty()) {
+            return message
+        }
+        val localizedMessage = throwable?.localizedMessage?.trim()
+        if (!localizedMessage.isNullOrEmpty()) {
+            return localizedMessage
+        }
+        return defaultMsg
+    }
+
 
     /**
      * 0  没有图标 1 绿色(成功)   2红色(失败)
@@ -1072,4 +1086,4 @@ class ChemicalLabelingActivity : BaseActivity() {
         addDisposable(disposable)
     }
 
-}
+}

+ 2 - 2
app/src/main/java/xn/hxp/weidith/prin_label_dialog/PrintLabelDialog.java

@@ -125,13 +125,13 @@ public class PrintLabelDialog extends AppCompatDialog {
                 labelDialogAdapter = new PrintLabelAdapter();
                 binding.rvView.setAdapter(labelDialogAdapter);
                 labelDialogAdapter.setList(labelList);
-                // 删除/重新扫描
+                // 重新扫描
                 labelDialogAdapter.setOnItemChildClickListener((adapter, view, position) -> {
                     if (position < 0 || position >= labelList.size()) {
                         return;
                     }
                     selectedIndex = position;
-                    if (view.getId() == R.id.rescanBtn || view.getId() == R.id.imgDelete) {
+                    if (view.getId() == R.id.rescanBtn) {
                         clearRfid(position);
                     }
                 });

+ 11 - 11
app/src/main/res/layout/activity_chemical_labeling.xml

@@ -380,9 +380,9 @@
                     android:gravity="center">
 
                     <TextView
-                        android:layout_width="match_parent"
+                        android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:layout_weight="1"
+                        android:layout_weight="0.95"
                         android:ellipsize="end"
                         android:gravity="center"
                         android:maxLines="1"
@@ -391,9 +391,9 @@
                         android:textSize="12sp" />
 
                     <TextView
-                        android:layout_width="match_parent"
+                        android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:layout_weight="1"
+                        android:layout_weight="0.95"
                         android:ellipsize="end"
                         android:gravity="center"
                         android:maxLines="1"
@@ -402,9 +402,9 @@
                         android:textSize="12sp" />
 
                     <TextView
-                        android:layout_width="match_parent"
+                        android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:layout_weight="1"
+                        android:layout_weight="2.4"
                         android:ellipsize="end"
                         android:gravity="center"
                         android:maxLines="1"
@@ -414,9 +414,9 @@
                         android:visibility="visible" />
 
                     <TextView
-                        android:layout_width="match_parent"
+                        android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:layout_weight="1"
+                        android:layout_weight="0.8"
                         android:ellipsize="end"
                         android:gravity="center"
                         android:maxLines="1"
@@ -425,9 +425,9 @@
                         android:textSize="12sp" />
 
                     <TextView
-                        android:layout_width="match_parent"
+                        android:layout_width="0dp"
                         android:layout_height="wrap_content"
-                        android:layout_weight="1"
+                        android:layout_weight="0.9"
                         android:ellipsize="end"
                         android:gravity="center"
                         android:maxLines="1"
@@ -779,4 +779,4 @@
         android:text="返回180s"
         android:textColor="@color/white"
         android:textSize="12sp" />
-</RelativeLayout>
+</RelativeLayout>

+ 19 - 19
app/src/main/res/layout/dialog_print_label.xml

@@ -101,51 +101,51 @@
                 android:gravity="center_vertical">
 
                 <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
+                    android:ellipsize="end"
+                    android:maxLines="1"
                     android:layout_width="40dp"
                     android:layout_height="wrap_content"
+                    android:gravity="center"
+                    android:text="序号"
                     android:textColor="@color/black"
                     android:textSize="12sp" />
 
                 <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
-                    android:layout_width="match_parent"
+                    android:ellipsize="end"
+                    android:maxLines="1"
+                    android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_weight="1.15"
+                    android:gravity="center_vertical"
+                    android:paddingStart="8dp"
+                    android:paddingEnd="8dp"
                     android:text="编号"
                     android:textColor="@color/black"
                     android:textSize="12sp" />
 
                 <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
-                    android:layout_width="match_parent"
+                    android:ellipsize="end"
+                    android:maxLines="1"
+                    android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_weight="1.8"
+                    android:gravity="center_vertical"
+                    android:paddingStart="8dp"
+                    android:paddingEnd="8dp"
                     android:text="RFID"
                     android:textColor="@color/black"
                     android:textSize="12sp" />
 
                 <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
+                    android:ellipsize="end"
+                    android:maxLines="1"
                     android:layout_width="84dp"
                     android:layout_height="wrap_content"
+                    android:gravity="center"
                     android:text="操作"
                     android:textColor="@color/black"
                     android:textSize="12sp" />
 
-                <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
-                    android:layout_width="40dp"
-                    android:layout_height="wrap_content"
-                    android:text="删除"
-                    android:textColor="@color/black"
-                    android:textSize="12sp" />
-
             </LinearLayout>
 
             <RelativeLayout

+ 23 - 23
app/src/main/res/layout/item_chemical_labeling.xml

@@ -2,7 +2,7 @@
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/cont"
     android:layout_width="match_parent"
-    android:layout_height="35dp"
+    android:layout_height="44dp"
     android:background="@color/white"
     android:orientation="horizontal">
 
@@ -14,58 +14,58 @@
 
 
         <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
             android:id="@+id/chemicalName"
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
+            android:layout_weight="0.95"
             android:gravity="center"
+            android:ellipsize="end"
+            android:maxLines="1"
             android:textColor="@color/black"
             android:textSize="10sp" />
 
         <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
             android:id="@+id/tagCode"
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
+            android:layout_weight="0.95"
             android:gravity="center"
+            android:ellipsize="end"
+            android:maxLines="1"
             android:textColor="@color/black"
             android:textSize="10sp" />
 
         <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
             android:id="@+id/rfidCode"
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
+            android:layout_weight="2.4"
             android:gravity="center"
+            android:ellipsize="end"
+            android:maxLines="1"
             android:textColor="@color/black"
-            android:textSize="10sp"
+            android:textSize="9sp"
             android:visibility="visible" />
 
         <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
             android:id="@+id/specNum"
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
+            android:layout_weight="0.8"
             android:gravity="center"
+            android:ellipsize="end"
+            android:maxLines="1"
             android:textColor="@color/black"
             android:textSize="10sp" />
 
         <TextView
-                android:ellipsize="end"
-                android:maxLines="1"
             android:id="@+id/belongName"
-            android:layout_width="match_parent"
+            android:layout_width="0dp"
             android:layout_height="wrap_content"
-            android:layout_weight="1"
+            android:layout_weight="0.9"
             android:gravity="center"
+            android:ellipsize="end"
+            android:maxLines="1"
             android:textColor="@color/black"
             android:textSize="10sp" />
     </LinearLayout>
@@ -75,4 +75,4 @@
         android:layout_height="0.5dp"
         android:layout_alignParentBottom="true"
         android:background="@color/purple_FFE0E0E0" />
-</RelativeLayout>
+</RelativeLayout>

+ 10 - 7
app/src/main/res/layout/item_print_label_rv.xml

@@ -10,6 +10,16 @@
         android:gravity="center_vertical">
 
         <TextView
+            android:id="@+id/no"
+            android:layout_width="40dp"
+            android:layout_height="match_parent"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:maxLines="1"
+            android:textColor="@color/black"
+            android:textSize="10sp" />
+
+        <TextView
             android:id="@+id/tagCode"
             android:layout_width="0dp"
             android:layout_height="match_parent"
@@ -46,13 +56,6 @@
             android:text="重新扫描"
             android:textColor="@color/white"
             android:textSize="10sp" />
-
-        <ImageView
-            android:id="@+id/imgDelete"
-            android:layout_width="20dp"
-            android:layout_height="20dp"
-            android:layout_marginEnd="10dp"
-            android:background="@mipmap/icon_yrk_sc" />
     </LinearLayout>
 
     <View

+ 1 - 2
app/src/main/res/layout/label_dialogs.xml

@@ -111,7 +111,6 @@
                 android:maxLines="1"
                 android:layout_width="40dp"
                 android:layout_height="wrap_content"
-                android:gravity="center"
                 android:textColor="@color/black"
                 android:textSize="16sp" />
 
@@ -181,4 +180,4 @@
             android:text="确定" />
     </LinearLayout>
 
-</LinearLayout>
+</LinearLayout>