From d13546b379e72db951411b0309e96afccd5ccd7c Mon Sep 17 00:00:00 2001 From: sky121113 Date: Tue, 19 May 2026 16:35:13 +0800 Subject: [PATCH] =?UTF-8?q?[FIX]=20=E5=84=AA=E5=8C=96=E9=BB=9E=E9=81=B8?= =?UTF-8?q?=E5=95=86=E5=93=81=E4=B9=8B=E5=87=BA=E8=B2=A8=E5=8F=A3=E7=8B=80?= =?UTF-8?q?=E6=85=8B=E5=88=A4=E6=96=B7=E8=88=87=E9=98=B2=E9=87=8D=E8=A4=87?= =?UTF-8?q?=E9=BB=9E=E6=93=8A=E6=A9=9F=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 重構 checkSlotHaveProduct 方法以支援安全回呼與 3000ms 超時保護。 2. 修正 DevCheckSlotByVMC 串口讀取未重置 haveThings 導致的狀態殘留 Bug。 3. 加入 isCheckingSlot 點選鎖,防呆避免非同步檢查期間重複點擊商品。 4. 於異常 AlertDialog 手動與自動關閉路徑中,正確釋放點選鎖。 5. 更新中英日三語系取貨口有物文字為「取貨口有東西,請先取出」,並將 Dialog 字體放大至 24sp。 6. 將 checkSlot 的串口讀取延遲由 2000ms 降至 800ms,大幅加速點選商品的反應時間。 --- .../ui/devs/vmc/RecyclerVmcBuyListAdpter.java | 80 ++++++++++++++++--- app/src/main/res/values-en/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 71 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/devs/vmc/RecyclerVmcBuyListAdpter.java b/app/src/main/java/com/unibuy/smartdevice/ui/devs/vmc/RecyclerVmcBuyListAdpter.java index c3d79ed..248d8ec 100644 --- a/app/src/main/java/com/unibuy/smartdevice/ui/devs/vmc/RecyclerVmcBuyListAdpter.java +++ b/app/src/main/java/com/unibuy/smartdevice/ui/devs/vmc/RecyclerVmcBuyListAdpter.java @@ -4,9 +4,11 @@ import android.app.AlertDialog; import android.content.Context; import android.os.Handler; import android.os.Looper; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; @@ -38,6 +40,7 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter SlotList; private FragmentAbstract fragment; private boolean haveThings, doorError; + private volatile boolean isCheckingSlot = false; // 點擊鎖:防止非同步檢查期間重複點擊 public RecyclerVmcBuyListAdpter(FragmentAbstract fragment, List slotList) { this.logs = new Logs(this.getClass()); @@ -155,6 +158,9 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter { + isCheckingSlot = false; + BuyStructure buyProduct = new BuyStructure(slotProduct.getField(), slotProduct.getSlot(), + slotProduct.getProduct(), 1); + MyApp.getInstance().getBuyList().add(buyProduct); + fragment.getSrcHandlerMain().start(getClass().getSimpleName(), + FontendActivity.Option.STOP_COUNTDOWN.getOption(), "stop countdown"); + new MemberCardPickupDialog(context, fragment.getSrcHandlerMain()).show(); + }); } } - public void checkSlotHaveProduct(int slotnum, int slotcount) { + public void checkSlotHaveProduct(int slotnum, int slotcount, Runnable onSafe) { + haveThings = false; + doorError = false; + + java.util.concurrent.atomic.AtomicBoolean isHandled = new java.util.concurrent.atomic.AtomicBoolean(false); + + // 設定 3000ms 超時機制:如果機器沒反應,視為正常並繼續,避免程式卡住 + if (onSafe != null) { + new Handler(Looper.getMainLooper()).postDelayed(() -> { + if (!isHandled.getAndSet(true)) { + logs.info("VMC Check Slot Timeout - Approving Safe (Timeout Safeguard)"); + onSafe.run(); + } + }, 3000); + } + logs.info("RecyclerDialogBuyListAdpter 111111111111111" + slotnum); - // MyApp.getInstance().getDevXinYuanController().getReadBufferByNow(new - // DevCheckSlotByVMC(handlerMain)); logs.info("RecyclerDialogBuyListAdpter 222222222222222" + slotcount); MyApp.getInstance().getDevXinYuanController().addSendBuffer( MyApp.getInstance().getDevXinYuanController().getDevXinYuan().checkSlotPre(slotnum, slotcount)); @@ -191,13 +215,19 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter { AlertDialog dialog = new AlertDialog.Builder(context) @@ -239,6 +271,7 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter { d.dismiss(); + isCheckingSlot = false; handlerMain.start(getClass().getSimpleName(), BuyDialog.Option.FORCE_CLOSE.getOption(), "force close"); }) @@ -246,16 +279,24 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter { if (dialog.isShowing()) { dialog.dismiss(); + isCheckingSlot = false; handlerMain.start(getClass().getSimpleName(), BuyDialog.Option.FORCE_CLOSE.getOption(), "force close"); } }, 10_000); // 10 秒(10000 毫秒) }); } else if (doorError) { + if (isHandled.getAndSet(true)) return; // 取貨口門未關閉,提示使用者並阻止後續購買流程 doorError = false; handlerMain.start("RecycleFlowerBuyListAdpter", "取貨口門未正常關閉,請先確認門已關好"); @@ -267,6 +308,7 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter { d.dismiss(); + isCheckingSlot = false; handlerMain.start(getClass().getSimpleName(), BuyDialog.Option.FORCE_CLOSE.getOption(), "force close"); }) @@ -274,15 +316,29 @@ public class RecyclerVmcBuyListAdpter extends RecyclerView.Adapter { if (dialog.isShowing()) { dialog.dismiss(); + isCheckingSlot = false; handlerMain.start(getClass().getSimpleName(), BuyDialog.Option.FORCE_CLOSE.getOption(), "force close"); } }, 10_000); // 10 秒(10000 毫秒) }); + } else { + // 狀態安全且無異常,執行購買回呼 + if (!isHandled.getAndSet(true)) { + if (onSafe != null) { + new Handler(Looper.getMainLooper()).post(onSafe); + } + } } } } diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 6c0c0b4..fb68171 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -387,7 +387,7 @@ Abnormal response, message error For product delivery issues, please contact the counter window! Abnormal reminder - There is something at the pickup port, please contact the service staff to handle it! + There is something at the pickup port, please remove it first knew Input Vehicle Reload Products diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 48d67bd..d7ffc21 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -387,7 +387,7 @@ 異常応答、メッセージエラー 商品配送に関するトラブルはカウンター窓口までお問い合わせください! 異常なリマインダー - ピックアップポートに何かある場合は、サービススタッフに連絡して対応してください! + 受取口に物があります、先に取り出してください 知っていた スマホバーコード への入力 商品データを同期 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e32feab..7a83c6a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -297,7 +297,7 @@ 回應異常,電文錯誤 商品出貨問題,請洽櫃台窗口! 異常提醒 - 取貨口有東西,請聯繫服務人員處理! + 取貨口有東西,請先取出 知道了 輸入載具 領取確認