Commit Graph

143 Commits

Author SHA1 Message Date
TaiwanStar Developer
4afc3a59d4 refactor(ui): 優化支付選項對話框之版面配置與應付金額顯示樣式 2026-06-16 17:25:12 +08:00
sky121113
309518f3ca [FEAT] 選擇支付方式頁顯示件數與應付金額,並防止來店禮重複掃描
1. dialog_buy.xml:將原本隱藏的金額列改為可見,新增「共 X 件」件數顯示與「應付金額」標題,金額靠右呈現。
2. BuyDialog.java:新增 refreshAmountBar() 統一刷新件數與應付金額,onCreate 與 SET_PRICE 事件皆改走此方法。
3. BuyDialog.java:抽出 getOriginalPrice()(未折扣原價)與 getTotalCount()(總件數,排除免費商品),getTotalPrice() 改用 getOriginalPrice() 並沿用折抵後至少 1 元保護。
4. BuyDialog.java:來店禮折抵改以「實際省下的金額」顯示(NT$XXX (已折抵 NT$YY)),取代原本 mode 2 顯示折扣乘數 0.8 的難懂呈現。
5. BuyDialog.java:防呆——本筆已套用來店禮(freeGiftId 非空)即隱藏來店禮入口按鈕,禁止重複掃描覆蓋/疊加折扣。
6. strings.xml:新增 pay_item_count、pay_payable_amount、pay_discounted_format 字串。
7. app/build.gradle:verPatch 1 → 2。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:01:45 +08:00
sky121113
c986b69e16 [FIX] 修復出貨中途加購倒數疊畫面、結案欄位被洗成 0、對話框誤判待機,並修打包腳本自殺
1. 結案上報穩定化:TransactionFinalizeBuilder 新增 captureOrderInfo() 快照(flowType/總金額/找零/點數),DispatchDialog 進入出貨時(isCmuh→42 覆寫後)擷取;build() 與「通行碼(5)不上報」判斷改用快照(effectiveXxx/getOrderFlowType),避免出貨中途全域 flowInfo 被洗回 0 導致 payment_type/total 落地成 0「未知」或通行碼被誤報。
2. 加購倒數疊畫面:DispatchDialog.onCreate 與 CheckoutAccessCodeDialog.changeDispatch 進入出貨前統一補送 STOP_COUNTDOWN,關閉 FontendActivity 的 40 秒加購倒數,避免出貨/取貨倒數中途到期觸發 BUY_DIALOG_OPEN、支付畫面疊在出貨畫面上跳出(通行碼、TapPay 等成功路徑原本未送)。
3. 移除加購功能殘留:BuyDialog 刪除 buttonAddProduct 監聽與 gotoAddProduct(),dialog_buy.xml 移除加購按鈕。
4. 待機誤判修復:FontendActivity.onUserInteraction 一併 resetIdleTimer(對話框觸控不會觸發 dispatchTouchEvent),idleRunnable 以全域最後互動時間二次確認,剩餘時間不足才真正踢回待機,避免操作付款/詳情等對話框時被誤判閒置。
5. 打包腳本修復:compiler-apk.md 的 daemon-kill 段把 pgrep/pkill 比對字串拆開拼接並排除自身 PID,修正背景任務情境下腳本命令列含完整 GradleDaemon class 字串導致 pgrep 比對到自己、pkill 自殺、編譯 exit 144 未啟動的問題。
6. 升版號:build.gradle verMinor=2、verPatch=1(S9XYU=21_02_1_R/210201)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 16:32:13 +08:00
sky121113
9a4f68455d [FIX] 修復發票統編「下一步」失效與待機死結,並調整銷售平台資訊欄
1. 修復發票統編對話框「下一步」按鈕未綁定點擊事件,導致統編→電話兩步驟流程卡死、統編永遠送不到後台;新增 changeNextStep() 驗證統編長度並切換至電話輸入步驟。
2. 修復購物車殘留造成「永遠忙碌→永不待機→永不清車」死結:忙碌判定移除「購物車非空」條件,進行中狀態改由對話框開啟(isShowDialog)與感應支付(isNfcPaymentActive)涵蓋。
3. 銷售平台移除上、下方灰色資訊欄(linearLayout5、bottom_bar),改於 applySaleOverlayVisibility 一律隱藏。
4. 機台資訊列新增時間顯示(置於網路前),並以獨立的 ClockTickScheduler 每秒刷新,與 10 秒上報重活迴圈分離,避免將上報/重啟判斷拉到每秒。
5. 版號遞增 verPatch 97→98。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 15:26:07 +08:00
TaiwanStar Developer
dd87f1ca6e Merge remote-tracking branch 'origin/feat/general-cart-and-payment' into ui-design 2026-06-16 13:52:36 +08:00
TaiwanStar Developer
eae0342ab8 refactor(ui): 優化商品詳情對話框與列表樣式,並抽離共用文字尺寸配置 2026-06-16 13:51:57 +08:00
sky121113
c7bc554eca [FIX] 修復掃碼支付(玉山)結案前購物車被清空導致「無商品紀錄」
1. 根因:order.items 在結案 build() 當下才即時讀 live buyList,掃碼支付(玉山)流程較慢(掃碼+玉山API約20s),結案前 buyList 會被取消/倒數路徑清空,造成 order.items 變空陣列(無商品紀錄),但出貨其實成功(dispense 有商品)。
2. TransactionFinalizeBuilder 新增 itemsSnapshot 商品明細快照欄位與 captureItems() 方法;buyList 為空時不覆寫既有快照。
3. 抽出共用 buildItemRecords() helper,captureItems() 與 build() fallback 共用。
4. build()/buildOrderPayload() 改為優先採用快照,無快照時才 fallback 讀 live buyList。
5. DispatchDialog onCreate 建立 finalizeBuilder 後立即 captureItems(),此時 buyList 必完整。
6. 升版 verPatch 95 → 96 (S9XYU versionName 21_01_96_R / versionCode 210196)。

正常情況快照==live,逐字等價;僅在 buyList 被清空的 bug 情境修正。純 App 端,不影響後台與線上 main。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:13:46 +08:00
TaiwanStar Developer
647e72aa9b refactor(ui): 優化支付選項對話框樣式與倒數計時文字 2026-06-16 11:30:51 +08:00
sky121113
89c7d04f7a [FIX] 修復遠端更新設定誤刪廣告,並完善機台資訊列顯示
1. [FIX] persistCurrentSettings() 原以 deleteAll() 清空整張 SettingsDao,
   連坐刪除廣告(VideoEoxPlayer)等持久資料;改為僅 deleteWhere 逐筆刪除
   接下來要重寫的 4 個設定 key(Machine/Esunpay/GreenInvoice/Greenpaysetting)。
   修正「遠端更新設定→重啟 App 後廣告消失,須再更新廣告才出現」問題。
2. [FEAT] 機台資訊列左側改顯示「序號 + 版本號(Ver versionName)」。
3. [FEAT] 機台資訊列網路訊號改為動態:依 WiFi RSSI / 行動網路 dBm 切換訊號格數
   icon 與文字(無網路/WiFi/行動/有線),並於 SET_NETWORK 與輪詢時即時更新。
4. [REFACTOR] 進站後門觸控由舊 textNetwork 遷移至機台資訊列的「序號+版本號」元素
   (舊系統列已隱藏不再接收觸控)。
5. [STYLE] activity_fontend 機台資訊名稱樣式調整(灰色/14sp/透明度 0.7)。
6. 版號 verPatch 93 → 94。
2026-06-16 11:09:45 +08:00
TaiwanStar Developer
f700881788 Merge remote-tracking branch 'origin/feat/general-cart-and-payment' into ui-design 2026-06-16 09:53:26 +08:00
TaiwanStar Developer
7ec2d3916a feat(ui): 實作首頁機台資訊列,包含網路、溫度及多國語言切換功能 2026-06-16 09:51:47 +08:00
sky121113
6caaf0890e [FEAT] 交易生命週期上報(pending/failed)與發布 v93
1. app/build.gradle:verPatch 91 → 93(高於機台已 OTA 的 v92,確保修正上得了機台)。
2. structure/ReportFlowInfoStructure.java:新增 mqttFlowId 欄位,作為一次交易的 MQTT 流水號,pending → completed/failed 全程共用,與取貨碼/通行碼用的 reportFlowId 分離。
3. structure/mqtt/TransactionFinalizePayload.java:OrderPayload 新增 status 欄位(pending/completed/failed/abandoned),未帶時後台預設 completed,確保線上 main 機台行為不變。
4. tools/TransactionFinalizeBuilder.java:改用 mqttFlowId(無則生成並回存)、新增可變 status/payment_status 與失敗代碼;新增 publishPending()/publishFailed() 靜態上報;以 shopping_mode == "basic" 判斷是否上報(晟崴 employee_card/中國醫 pickup_sheet 無實際付款不送);pending/failed 不開立發票。
5. ui/dialog/BuyDialog.java:changeCheckout 進入付款時為實際付款方式(1/2/3/4/9/30/70)生成新 mqttFlowId 並上報 pending(進付款一律留底),先清除上一筆避免 flow_id 撞單。
6. ui/dialog/CheckoutNfcCardDialog、CheckoutNfcRechargeDialog、CheckoutNfcPhoneDialog:刷卡機回非 0000 或空電文的失敗分支補上 publishFailed(代碼),救回原本默默消失的失敗單。
7. ui/dialog/CheckoutEsunPayDialog、CheckoutTapPayDialog、CheckoutLinePayDialog:掃碼/官方支付 TRANSACTION_FAILED 分支補上 publishFailed。

過渡期保護:晟崴/中國醫 跑 main 分支、無實際付款,且後台四鐵律(無 status 預設 completed、終態冪等、pending 才轉移、abandoned 只掃 pending)保證其後台資料逐字不變。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 08:54:42 +08:00
sky121113
9bfb429392 [FIX] 修復刷卡機交易成功卻不繼續出貨流程
1. 修正 DevNFCPayController.execute():刷卡機(NFC/悠遊卡/手機/信用卡)回傳的 404 byte 電文本身已含 responseCode(成功為 0000),直接以 devNFCPay.read() 解析該段並送出 RESPONSE。
2. 移除先前誤加的「再以 readListen 等待第二段電文」邏輯:刷卡機僅送一段,等不到第二段導致倒數逾時、RESPONSE 從未送達對話框、changeDispatch() 無法觸發,造成「刷卡機顯示成功卻不出貨」。
3. 保留 isShowDialog / isShuttingDown 生命週期防護;此 controller 為所有感應付款共用,一次修復全部感應類付款。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 08:54:19 +08:00
TaiwanStar Developer
317dec1084 feat(ui): 優化取貨碼相關對話框與列表之 UI 排版 2026-06-15 16:43:58 +08:00
TaiwanStar Developer
be3c25bbf5 Merge remote-tracking branch 'origin/feat/general-cart-and-payment' into ui-design 2026-06-15 16:24:58 +08:00
sky121113
ff65559b4c [FEAT] 電子發票改由後台開立:機台只隨 finalize 上報發票輸入
1. TransactionFinalizePayload 新增 InvoicePayload 物件(status/amount/carrier_id/business_tax_id/love_code 等),讓 finalize 一併帶上發票開立輸入。
2. TransactionFinalizeBuilder:有發票需求(invoiceInfo 非空)時,從 InvoiceData 組發票輸入並固定 status=pending 帶進 finalize;機台不再判定開立結果。
3. DispatchDialog:移除機台直連綠界開票,改為進出貨流程僅上報;發票由後台收到 finalize 後建 pending 並去綠界開立(避免機台網路不確定性與等待)。
4. ReportInvoiceInfoStructure:保留 relateNumber 欄位(冪等鍵相關)。
5. 開票邏輯不放在即將淘汰的 HttpAPI(先前暫放 StarCloudAPI 的機台開票方法亦已移除)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 16:18:11 +08:00
TaiwanStar Developer
092c0e9a16 feat(ui): 調整系統設定頁面排版與玉山支付模組設定
- 將「購物方式」資訊移至 Header 區域並移除身份說明文字

- 將機台貨道顯示方式改為 TableLayout 並設為唯讀狀態,隱藏儲存按鈕

- 為大卡片容器增加 app:cardUseCompatPadding=true 並取消父層剪裁,修復卡片陰影遭裁切問題

- 修改玉山支付模組,將台灣Pay子標籤改為「玉山支付模組」,並徹底移除街口支付、LinePay、全支付、PiPay 等子項目及其連動邏輯

- 統一設定項目文字顏色,並新增相關支付圖示資源
2026-06-15 16:07:05 +08:00
sky121113
7875db4c7d [FIX] 升版 v91(OTA 版號遞增,內容同 v90 支付 MQTT finalize 修正)
1. build.gradle verPatch 90 → 91,供實體機台 OTA 升級。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 14:03:17 +08:00
TaiwanStar Developer
b32f76c753 style: 調整結帳對話框交易金額冒號與按鈕顏色
- 將Line Pay、NFC卡片、NFC手機、NFC加值對話框中的交易金額冒號改為全形

- 調整NFC卡片對話框取消按鈕文字色為onWarning,修改支付方式背景色為gray
2026-06-15 13:57:41 +08:00
sky121113
3fd34becb6 [FIX] 支付成功改走 MQTT finalize、修正卡在倒數不出貨;升版 v90
真因:各支付 Dialog 成功後呼叫已停用的 B600(reportFlowInfo),再靠 B600 的 HTTP 回應回呼 REPORT_FLOW 才進 DispatchDialog;B600 已失敗 → 永遠不出貨,卡到倒數 COUNTDOWN_CANCEL(症狀:刷卡機顯示成功但流程不繼續)。

1. CheckoutNfcCardDialog / CheckoutNfcRechargeDialog:支付成功(0000)不再呼叫 B600,直接 changeDispatch() 進 DispatchDialog,由 MQTT publishTransactionFinalize 統一上報(payload 已含 invoice_info,B600/B650 皆不需要)。
2. CheckoutNfcPhoneDialog:同上,且進 dispatch 前覆寫 payment_type=10(手機支付);刷卡機 NCCC 電文無法區分手機錢包/實體卡,依使用者所選按鈕分類。
3. CheckoutEsunPayDialog / CheckoutLinePayDialog / CheckoutTapPayDialog:交易成功直接 changeDispatch;交易失敗改為提示「交易失敗」並返回購買頁(changeBuy),不再卡住或誤出貨。
4. LinePay 維持 payment_type=70(官方直連),後台另補定義;TapPay 子項 30~34 沿用。
5. 舊 CheckoutCashDialog/CashPayDialog 為 legacy,basic shopping_mode 不使用(現金走 CashPayDialogGeneral),本次未動。
6. build.gradle 版號 verPatch 89 → 90。

注意:後台 star-cloud 需同步新增 payment_type 10(手機支付)/70(LINE Pay 官方) 與翻譯(另一 repo,另行提交)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:56:56 +08:00
sky121113
a99f7b0572 [FEAT] 雲端日誌分級(LogLevel)與除錯雜訊清理
1. MyApp 新增 logLevel 欄位(預設 INFO),由雲端 B014 LogLevel 下發並回送,現場除錯硬體可設 DEBUG。
2. Logs.debug()/ignore() 改為僅在 LogLevel=DEBUG 時寫入 debug.txt;logcat 一律照印不受影響。
3. Logs 新增單行寫檔上限 MAX_LINE(1000),超長 JSON/payload dump 截斷並保留原始長度,避免淹沒 debug.txt。
4. 將 HttpAPI/HttpTapPay/DevXinYuan/DevXinYuanController/DevNFCPayController/BuyDialog/DispatchDialog 大量 "AAAA…/bbbb…" 開發雜訊 logs.info 改為 logs.debug 並補上具體訊息。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 13:56:32 +08:00
sky121113
7cb9039a50 [FEAT] 商品詳情頁接 B012 t060v03_i18n 規格多語(純文字含換行原樣呈現)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 11:50:00 +08:00
sky121113
d7bef7b827 [FIX] 修正直接購買(購物車版)未跳購物車品項頁的真因;升版 v89
1. 真因:DialogProductDetail 取 SaleFlowHandler 時用 onCreate 的 getContext(),那是 AlertDialog 包裝過的 ContextThemeWrapper,instanceof FontendActivity 為 false,導致 openCartList 靜默 return(一般版因 requestBuy 有 new BuyDialog 後路才照常開支付頁,故僅購物車版受影響)。
2. 修法:建構子保存原始傳入的 Context(真正的 FontendActivity)為 hostContext,openCartList/requestBuy 改用 hostContext 做 instanceof 與取 SaleFlowHandler。
3. 升版號 verPatch 88 → 89。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:24:28 +08:00
sky121113
1c9022cc5e [FIX] 修正商品格線右緣觸控失效與直接購買未跳購物車頁;升版 v88
1. 修正 fragment_vmc.xml 商品格線 recyclerBuy 在 ConstraintLayout 缺水平約束(原 match_parent 僅綁上下)導致右側佈局/觸控異常:改為 0dp + start/end 綁 parent 確保全寬與右緣可點。
2. RecyclerVmcBuyListAdpter 讓整張商品卡片皆可點開詳情頁(原僅圖片可點),避免點到名稱/價格區無反應。
3. 商品詳情頁「直接購買」(購物車版)改為先切換至購物車品項頁、再關閉詳情頁,避免關閉對話框與 fragment 切換時序互相干擾導致未跳頁。
4. 升版號 verPatch 87 → 88。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:13:36 +08:00
sky121113
df96f33d5f [FEAT] 商品詳情頁直接購買分流與數量帶入;升版 v87
1. 詳情頁「直接購買」依購物車開關分流:購物車開啟時以詳情頁選定數量加入購物車後前往購物車列表頁(不直接結帳);購物車關閉(一般版)維持單品直購彈 BuyDialog 選付款。
2. 修正數量未帶入問題:加入購物車與直接購買統一走 addSelectedQuantityToCart(),依詳情頁數量逐件加入,點 N 件購物車即為 N 件。
3. 升版號 verPatch 86 → 87。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 10:44:19 +08:00
sky121113
bd23c31ba1 [FEAT] 商品詳情頁接線:點商品開詳情、依購物車開關呈現按鈕
1. 新增 DialogProductDetail:把原本只有佈局的商品詳情頁接活,顯示商品圖、多語名稱、貨道、庫存、數量與金額小計。
2. 依雲端 DevSet.ShoppingCar 呈現按鈕:購物車開啟顯示「數量調整+加入購物車+直接購買」;購物車關閉(一般版)隱藏「數量調整+加入購物車」,只留「直接購買」且數量固定 1。
3. 加入購物車以選定數量逐件加入(沿用 CartViewModel 庫存/8 件上限防呆);直接購買清空 buyList 放入本商品後走既有 BuyDialog 選付款。
4. BasicSaleFlow.handleProductSelected 改為點商品一律先彈出詳情頁。
5. RecyclerVmcBuyListAdpter 商品卡右下角「+」(buttonQuickAdd) 接線:僅購物車開啟時顯示並快速加購一件,關閉時隱藏。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 10:16:29 +08:00
sky121113
0900dc20f9 Merge branch 'feat/general-cart-and-payment' into ui-design 2026-06-15 09:47:41 +08:00
sky121113
35af9fec8f [FEAT] 升版 v85 並打包 S9XYU(多語系 11 語+後台 API 對接+ui-design 合併)
1. verPatch 84 → 85,對應自 v84 以來累積的多語系擴充(法德西)、後台 B014 LangSet/B012 i18n 對接、ui-design UI 改版合併與 10 語系字串對齊等變更,供 OTA 版號對齊。
2. 產出 S9XYU Debug APK:versionName 21_01_85_R、versionCode 210185。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 09:36:57 +08:00
TaiwanStar Developer
eb0b9c8271 feat(ui): 遷移商品詳情對話框佈局並修復編譯資源錯誤
- 加入 dialog_product_detail.xml

- 移除本專案未支援的 RoundLinearLayout 與 RoundTextView 等自訂元件與屬性

- 替換缺漏的圖示、文字與顏色資源以維持正常編譯
2026-06-15 09:35:53 +08:00
sky121113
8e02e7adeb [FEAT] 補齊 10 語系合併後缺漏字串,全語系對齊主檔
1. ui-design 合併後主檔 values/strings.xml 新增的 15 個顧客可見字串(員工卡支付、下載/上傳同步狀態、購物車數量上限、商品出貨成功、櫃門取貨、確認取貨倒數、機器巡檢等),補譯進全部語系。
2. 英/簡中/韓/越/泰/印尼/法/德/西 各補 15 條;日文補 12 條(原已有 back/syncing/sync_completed)。
3. 補齊後 10 個語系皆與主檔 0 缺漏,XML 全部 well-formed,這批新 UI 字串不再 fallback 中文。

註:機器翻譯品質,customer-facing 重點詞(員工卡、載具/統編等)建議母語者校對。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 09:30:48 +08:00
sky121113
a80bb4dd85 Merge remote-tracking branch 'origin/ui-design' into feat/general-cart-and-payment
# Conflicts:
#	app/src/main/java/com/unibuy/v2/adapter/CartOperationAdapter.kt
2026-06-15 09:21:49 +08:00
sky121113
92553d96d2 [FEAT] 多語系擴充法德西並對接後台 B014/B012 多語 API
1. 新增法文(values-fr)、德文(values-de)、西班牙文(values-es)三語系資源,各 286 條以 en 為範本,App 支援語系達 11 種;LanguageHelper 的 SUPPORTED_LANGUAGES、getDisplayName、canonicalize 一併補上 fr/de/es。
2. 語言選單改由後台決定:StarCloudAPI.saveSettings 解析 B014 新增的 LangSet(Languages 清單 + Default),FontendActivity 選單改讀 LanguageHelper.getMachineLanguages(),只顯示該機台後台啟用的語系;未取得 B014 時退回全部支援語系。首次(使用者未手動選過)自動套用後台預設語系。
3. 商品名稱改讀 B012 新增的 t060v01_i18n 多語 map:StarCloudAPI.saveProducts 解析並帶入每個商品;ProductStructure.getLocalizedName fallback 鏈改為 i18n map 對應語系 → map 的 zh_TW → 舊 _en/_jp → 中文主值,韓/泰/越等語商品名可正確顯示。
4. 語系代碼雙向轉換:後台底線格式 zh_TW 與 App 標準 zh-TW 互轉(LanguageHelper.toBackendLocale 與 canonicalize)。
5. 零 DB 風險持久化:機台語系(machineLanguages/defaultLanguage)與商品多語 blob 均存於既有 MemoDao(比照 shopping_mode),不動 products 表 schema、不升 DB 版本,避免破壞性 onUpgrade 清除現場機台綁定資料。

註:商品規格 spec 後台已送 t060v03_i18n 但 App 尚無顯示 UI 故未接;舊 HttpAPI 解析路徑未加 i18n,會 graceful fallback 至 _en/_jp。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 09:15:53 +08:00
TaiwanStar Developer
c7134fe712 feat(ui): 更新發票選擇對話框 UI 佈局為垂直排列
- 將發票選擇對話框 (InvoiceTypeDialog) 根佈局改為 ConstraintLayout,並加入半透明深色背景。
- 將發票選項(手機條碼、捐贈發票、公司統編)改為垂直排列,並移除副標題文字。
- 新增 invoice_button_height 定義發票選項卡片的高度。
- 調整返回按鈕位置,並優化倒數計時文字顯示邏輯。
2026-06-15 09:03:37 +08:00
TaiwanStar Developer
a10a51ec10 UI: 優化商品卡片結構與樣式
- 新增快速新增按鈕
- 卡片版面區分為上下區塊,統一由最外層控制邊距
- 調整商品圖片為 1:1,並帶有 padding 白框效果
- 貨道與庫存資訊移至左上角垂直排列,分別套用圓角背景色
- 修正金額為 0 時不顯示的問題
- 售罄遮罩覆蓋全卡片,文字改為白色「售完」
2026-06-12 17:27:12 +08:00
TaiwanStar Developer
0a19e965a8 feat(cart): 優化購物車品項數量調整邏輯與介面顯示
- 新增單一品項與總數量的調整限制邏輯,達上限時按鈕切換為 disabled 狀態

- 移除數量調整按鈕的陰影跳動與裁切問題

- 新增增加、減少、刪除按鈕的水波紋點擊反饋

- 在品項金額後方新增「庫存xx件」資訊,並統一樣式

- 購物車達數量上限時,顯示「已達數量上限」警告文字
2026-06-12 13:35:39 +08:00
TaiwanStar Developer
e331e399bc feat(ui): 統一來店禮與通行碼的對話框樣式與輸入模式切換
- 參照取貨碼對話框 (dialog_pickup_code_fontend) 重新設計 dialog_free_gift_code.xml 與 dialog_access_code.xml
- 於 CheckoutFreeGiftCodeDialog 與 CheckoutAccessCodeDialog 加入鍵盤輸入與掃描條碼之模式切換邏輯 (btnModeKeypad / btnModeScan)
2026-06-12 12:16:08 +08:00
sky121113
5b8a0d7cf6 [FEAT] 新增遠端 update_settings MQTT 指令並收斂系統設定為唯讀;升版 v84
1. MqttService 新增 update_settings 指令分支:收到後重抓系統設定(B014),
   不串接商品/廣告同步,僅更新設定本身。
2. 忙碌防呆:交易/購物車/對話框進行中(getBusyReason 非空)時拒收並回 failed
   ACK,後台 RemoteCommand 約 1 分鐘 timeout 後可重發。
3. 重連時序修正:先發成功 ACK,再延遲 1.5 秒重連 MQTT,避免重連把送指令的
   連線斷掉導致 ACK 發不出去(涵蓋 token 輪換情境)。
4. StarCloudAPI.downloadSetting 新增可選 reconnectMqtt 參數(saveSettings 同步),
   綁定 UI 流程維持 true、update_settings 路徑傳 false 由呼叫端控制重連時機;
   無參數多載維持原行為,向下相容。
5. SystemSetActivity 收斂:機台端系統設定全面唯讀,唯一可編輯項為硬體貨道
   (彈簧/履帶,僅系統方);移除現金總開關連動,回寫雲端只送 is_spring_slot_*。
6. app/build.gradle verPatch 升至 84。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 12:01:50 +08:00
TaiwanStar Developer
2e70c16aa3 UI: 更新取貨碼視窗樣式與佈局
- 將「請輸入取貨碼」標題與副標調整為單一標題
- 調整視窗上方 padding 與標題間距
- 實作「鍵盤輸入」與「掃描條碼」的分段控制按鈕,包含背景、文字顏色變化與陰影效果
- 按鈕群組移除外框並增加陰影
- 返回按鈕置中並修改文字為「取消xx秒」
- 「輸入完成」按鈕修改為「確認」
- 掃描條碼圖片等比例填滿容器
2026-06-12 11:49:14 +08:00
sky121113
318bfde1fb [FEAT] 多語系擴充至 8 語並改用語言選單;升版 v83
1. 新增 5 個語系資源:簡體中文(values-zh-rCN)、韓文(values-ko)、越南文(values-vi)、泰文(values-th)、印尼文(values-in,採 Android 舊代碼 in),各 285 條以 en 已翻譯集合為範本,缺漏字串自動 fallback 回預設繁中。
2. LanguageHelper 重寫支援 8 語完整 locale:SUPPORTED_LANGUAGES 清單、canonicalize() 相容舊碼(tw/jp)並帶 region、buildLocale() 處理 zh-TW/zh-CN 與印尼資源代碼、getDisplayName() 以各語自身文字顯示。
3. 商品名稱多語以 toProductLang() 收斂:僅 en/ja 取對應翻譯,其餘語言(簡中/韓/越/泰/印尼)一律 fallback 中文主值(後台目前僅中/英/日)。
4. FontendActivity 語言入口由 3 顆內聯鈕改為單一 🌐 鈕開啟 AlertDialog 單選選單(showLanguagePicker),隱藏 En/Ja 舊鈕;切換後重綁定入口。
5. 新增字串 select_language 並補齊全 8 語系翻譯。
6. 升版號 verPatch 82 → 83。

註:泰文需於真機驗證系統字型支援;5 種新翻譯為機器品質,customer-facing 字串建議母語者校對。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 10:30:22 +08:00
sky121113
fdf02189fb [FEAT] 解除 App 多語系隱藏並收斂商品名稱多語邏輯;升版 v82
1. FontendActivity 重新顯示中/En/日語言切換鈕(移除 visibility=gone),點擊監聽改傳統一代碼 zh/en/ja。
2. LanguageHelper 新增 normalizeCode()/normalizedLang(),將歷史 tw、Locale zh、日文 jp 全部收斂為 zh/en/ja 一套,changeLanguage 一律儲存正規化代碼。
3. ProductStructure 新增 getLocalizedName(),依目前語言取商品名稱,英/日未翻譯時自動 fallback 回中文主值,作為商品名稱顯示的單一來源。
4. 各 adapter 改用 getLocalizedName():RecyclerVmcBuyListAdpter、CartOperationAdapter、RecyclerDialogBuyListAdpter(原被註解)、RecyclerProductListAdpter 與 RecyclerProductSearchAdpter(原永遠顯示中文),刪除各自重複的語言 switch。
5. applySavedLanguage() 集中至 base class AppCompatActivityAbstract.onCreate(),所有 Activity 於 inflate 前統一套用語言設定。
6. 升版號 verPatch 81 → 82。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:59:47 +08:00
sky121113
73dee29485 [FIX] 修復購物車倒數返回 VMC 時的 onSaveInstanceState 崩潰
1. FontendActivity.switchFragment:commit 前檢查 Activity 是否已達 STARTED,非前景則跳過並記 log;並將 .commit() 改為 .commitAllowingStateLoss(),作為背景切換的最終防線(切換僅為 Fragment hide/show,資料在 ViewModel,state loss 無實害)。
2. FontendActivity.openFragment:同步加上 lifecycle 防呆,避免背景狀態下 commitNow() 丟出 IllegalStateException。
3. ShoppingCartFragment.onFinish:原以 isAdded() 判斷無法擋住 onSaveInstanceState 後的 commit,改以 lifecycle 是否達 STARTED 為準,避免 180 秒倒數於背景觸發 backToVmc 導致崩潰。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 09:35:20 +08:00
sky121113
a33c0c97bd Merge remote-tracking branch 'origin/ui-design' into feat/general-cart-and-payment 2026-06-12 08:47:50 +08:00
sky121113
39245a0608 [FIX] TapPay 圖示檔名改小寫修正 aapt2 命名違規;升版 v81
- ui-design 合併帶進的 TapPay30~34.png 用大寫檔名,違反 Android
  resource「只能 a-z/0-9/底線」規則,導致 mergeResources 失敗。
  改名為 tappay30~34.png(git mv 保留歷史)。圖示目前未被引用,
  改名不影響功能,保留供日後接線。
- verPatch 80→81

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 08:47:43 +08:00
TaiwanStar Developer
f6028ffb80 UI: 優化購物車頁面排版與樣式
1. 商品列表滿版顯示,品項數量移至最上方並縮小字級。
2. 小記與總額樣式調整:小記字級縮小且改為黑色,總額改為主題色,並對齊底部。
3. 底部操作區重新排版:左右比例改為 4:6,對齊底部水平線。
4. 按鈕樣式更新:
   - 「繼續選購」:改為 outline button。
   - 「清空購物車」:改為 warning 顏色的 outline button,移除計時括號並縮小字級。
   - 「前往結帳」:寬度填滿容器的按鈕。
5. 背景與陰影調整:底部操作區增加陰影並移除外框;商品區背景色調整。
6. 購物車單品操作按鈕(增減、刪除)增加 elevation 陰影效果。
2026-06-11 17:20:30 +08:00
sky121113
79e1f69325 Merge remote-tracking branch 'origin/ui-design' into feat/general-cart-and-payment 2026-06-11 16:58:21 +08:00
sky121113
8d2adee5ab [FEAT] 支付方式「母&&子」集中判斷 + 入口防呆;對話框期間隱藏銷售平台浮層
- DevSetStructure 新增 canCreditCard/canCardPay/canMobilePay/canEsunPay/
  canTapPay/canLinePay/canCash,集中「母開關 && 子項」真相
- BuyDialog 購物車/單品/例外三分支改用上述便利方法,並在 changeCheckout
  入口以 isPaymentFlowAllowed 再次防呆,擋下被繞過的已停用支付
- 浮層連動:HIDDEN/SHOW_MULTILANGUAGE_BUTTON 改為 HIDE/SHOW_SALE_OVERLAY,
  對話框與購物車 Fragment 期間統一隱藏取貨碼/購物車浮鈕與上下系統列
- 無操作逾時 3 分鐘調整為 5 分鐘;verPatch 79→80

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 16:58:14 +08:00
TaiwanStar Developer
b0f7381832 新增 TapPay 相關圖示資源 2026-06-11 16:21:49 +08:00
TaiwanStar Developer
5af9a94a0c 優化購物車品項排版與按鈕樣式
1. 新增按鈕背景與 Icon 向量資源
- 新增 bg_quantity_outline_button.xml:為加減按鈕設計的背景,底色為頁面背景,帶有 1.5dp 黑色圓角外框。
- 新增 bg_waste_outline_button.xml:為移除按鈕設計的背景,底色為頁面背景,帶有 1.5dp 警告色圓角外框。
- 新增 add_24.xml、remove_24.xml、close_24.xml:將原本填充式圖示改寫為純線段,設定黑色線條且加粗 (strokeWidth="3")。
- 新增 close_warning_24.xml:移除按鈕專用的叉叉圖示,線條同樣加粗,顏色改為警告色。

2. 優化購物車清單排版 (recycler_cart_operation.xml)
- 圖片縮小:將商品圖片寬高從 120dp 縮減為 80dp。
- 文字調整:將商品名稱字級放大至 24sp,並將字重調整為 normal。
- 將單一品項金額設為隱藏,並將小計金額從最右側移至商品名稱下方。
- 加減按鈕:尺寸調整為 44dp 並加上 10dp padding,套用新的黑色外框背景與加粗 Icon。
- 移除按鈕:尺寸同樣調整為 44dp,改用 Warning 樣式外框與 Icon,並加大左側邊距 (marginStart=32dp) 以拉開間隔。

3. 其他連帶變更
- 包含 fragment_shopping_cart.xml 與多語系 strings.xml 的相關微小變動。
2026-06-11 16:21:49 +08:00
TaiwanStar Developer
ee732e03a3 UI: 更新購物車與取貨碼懸浮按鈕樣式及動態角標
- 將購物車與取貨碼改為統一的帶圓角 CardView 容器設計,使用 surface 背景與黑色圖示文字。
- 修正陰影裁切問題,移除外層容器的 clipChildren 限制。
- 購物車新增右上角紅色 Badge 顯示當前選取的商品總數,並與 CartViewModel 動態綁定。
- 調整懸浮按鈕位置,使其與底部機台資訊列保持 24dp 的合適間距。
- 新增 Google Material Icons: package_24 與 shopping_cart_24。
- 同步更新相關的 Agent 發版規則文件,移除廢棄的多維度 flavor 定義。
2026-06-11 15:18:38 +08:00
sky121113
fc21186a53 [FEAT] 來店禮串接 B690 + 掃碼即時回饋與空窗修正、通行碼購物車模式封堵
1. 來店禮改串新端點 B690(取代舊 HttpAPI.freeGiftCode):
   - StarCloudAPI 新增 verifyWelcomeGift(),POST machine/welcome-gift/verify/B690(Bearer 機台 token,body {code})。
   - CheckoutFreeGiftCodeDialog 手動輸入與掃碼皆改走 B690;折扣映射 amount→mode1(折抵金額)、percentage→mode2(折扣趴數換算總價乘數,八折20→0.8)。
   - 加 isWelcomeGift API 防護;非 amount/percentage 型別擋下提示。
   - 注意:B690 無舊「免費商品」型,純折扣。
2. 掃碼 UX 空窗修正(取貨碼/通行碼/來店禮三個對話框):
   - 掃描器啟動延遲 5 秒→0,對話框一彈出即監聽,解決「剛彈出馬上掃會整個丟失、時好時壞、無回饋」。
   - 讀取窗口 7→9 次(約 45 秒),覆蓋 40 秒對話框存活時間。
   - 新增 SET_SCAN_INPUT:掃到的碼即時顯示在輸入框;送出前顯示「驗證中…」。
3. 通行碼購物車模式封堵:
   - BuyDialog 購物車模式的付款清單中,通行碼(buttonAccessCode)從未 gating;改在 onCreate 加權威判斷,需 isPickupModule && isPassCode 才顯示,涵蓋購物車/單品所有模式。
4. 版號 verPatch 76→79。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-11 15:09:42 +08:00