From 2e70c16aa386b12f7d6d81be4632ee87d9981917 Mon Sep 17 00:00:00 2001 From: TaiwanStar Developer Date: Fri, 12 Jun 2026 11:49:14 +0800 Subject: [PATCH 1/5] =?UTF-8?q?UI:=20=E6=9B=B4=E6=96=B0=E5=8F=96=E8=B2=A8?= =?UTF-8?q?=E7=A2=BC=E8=A6=96=E7=AA=97=E6=A8=A3=E5=BC=8F=E8=88=87=E4=BD=88?= =?UTF-8?q?=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 將「請輸入取貨碼」標題與副標調整為單一標題 - 調整視窗上方 padding 與標題間距 - 實作「鍵盤輸入」與「掃描條碼」的分段控制按鈕,包含背景、文字顏色變化與陰影效果 - 按鈕群組移除外框並增加陰影 - 返回按鈕置中並修改文字為「取消xx秒」 - 「輸入完成」按鈕修改為「確認」 - 掃描條碼圖片等比例填滿容器 --- .../unibuy/smartdevice/DialogAbstract.java | 5 +- .../ui/dialog/FontendPickupCodeDialog.java | 22 +- .../main/res/color/color_input_mode_bg.xml | 5 + .../main/res/color/color_input_mode_text.xml | 5 + .../main/res/drawable/bg_input_outline.xml | 8 + .../res/drawable/bg_rounded_card_surface.xml | 5 + .../main/res/drawable/bg_rounded_surface.xml | 5 + .../res/drawable/bg_segmented_container.xml | 6 + app/src/main/res/drawable/keyboard_alt_24.xml | 9 + .../res/drawable/keyboard_backspace_24.xml | 9 + .../main/res/drawable/qr_code_scanner_24.xml | 12 + .../res/layout/dialog_pickup_code_fontend.xml | 282 ++++++++---------- app/src/main/res/values/styles.xml | 40 +++ 13 files changed, 251 insertions(+), 162 deletions(-) create mode 100644 app/src/main/res/color/color_input_mode_bg.xml create mode 100644 app/src/main/res/color/color_input_mode_text.xml create mode 100644 app/src/main/res/drawable/bg_input_outline.xml create mode 100644 app/src/main/res/drawable/bg_rounded_card_surface.xml create mode 100644 app/src/main/res/drawable/bg_rounded_surface.xml create mode 100644 app/src/main/res/drawable/bg_segmented_container.xml create mode 100644 app/src/main/res/drawable/keyboard_alt_24.xml create mode 100644 app/src/main/res/drawable/keyboard_backspace_24.xml create mode 100644 app/src/main/res/drawable/qr_code_scanner_24.xml diff --git a/app/src/main/java/com/unibuy/smartdevice/DialogAbstract.java b/app/src/main/java/com/unibuy/smartdevice/DialogAbstract.java index 5eab9c8..e270acb 100644 --- a/app/src/main/java/com/unibuy/smartdevice/DialogAbstract.java +++ b/app/src/main/java/com/unibuy/smartdevice/DialogAbstract.java @@ -88,6 +88,7 @@ public abstract class DialogAbstract extends AlertDialog { // 設定對話框寬度為螢幕的 90% Window window = getWindow(); if (window != null) { + window.setBackgroundDrawable(new android.graphics.drawable.ColorDrawable(android.graphics.Color.TRANSPARENT)); WindowManager.LayoutParams layoutParams = window.getAttributes(); // layoutParams.width = (int) (getContext().getResources().getDisplayMetrics().widthPixels * 0.9); @@ -97,8 +98,8 @@ public abstract class DialogAbstract extends AlertDialog { // 設定高度為包裹內容(可調整為 MATCH_PARENT) layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; - // 設定對話框貼齊底部 - layoutParams.gravity = Gravity.BOTTOM; + // 設定對話框居中顯示 + layoutParams.gravity = Gravity.CENTER; window.setAttributes(layoutParams); getSrcHandlerMain().start(getClass().getSimpleName(), FontendActivity.Option.HIDE_SALE_OVERLAY.getOption(), "hide sale overlay"); diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/dialog/FontendPickupCodeDialog.java b/app/src/main/java/com/unibuy/smartdevice/ui/dialog/FontendPickupCodeDialog.java index c0ae77f..c26631e 100644 --- a/app/src/main/java/com/unibuy/smartdevice/ui/dialog/FontendPickupCodeDialog.java +++ b/app/src/main/java/com/unibuy/smartdevice/ui/dialog/FontendPickupCodeDialog.java @@ -180,6 +180,18 @@ public class FontendPickupCodeDialog extends DialogAbstract { MyApp.getInstance().initialReportData(); + setInputMode(true); + + binding.btnModeKeypad.setOnClickListener(v -> { + setInputMode(true); + if (closeDialogCountdown != null) closeDialogCountdown.setCountdown(40); + }); + + binding.btnModeScan.setOnClickListener(v -> { + setInputMode(false); + if (closeDialogCountdown != null) closeDialogCountdown.setCountdown(40); + }); + isChangeDispatch = true; openBarcode = true; httpAPI = new HttpAPI(getHandlerMain()); @@ -295,6 +307,14 @@ public class FontendPickupCodeDialog extends DialogAbstract { } } + private void setInputMode(boolean isKeyboard) { + binding.btnModeKeypad.setSelected(isKeyboard); + binding.btnModeScan.setSelected(!isKeyboard); + + binding.linearNumpad.setVisibility(isKeyboard ? android.view.View.VISIBLE : android.view.View.GONE); + binding.imageViewScanHint.setVisibility(isKeyboard ? android.view.View.GONE : android.view.View.VISIBLE); + } + public class ReadBarCodeOnScheduler extends HandlerMainScheduler { public ReadBarCodeOnScheduler(HandlerMain handlerMain) { super(handlerMain); @@ -471,7 +491,7 @@ public class FontendPickupCodeDialog extends DialogAbstract { } public void setButtonCancelText(long countdown) { - binding.buttonCancel.setText(getContext().getString(R.string.return_to)+"("+countdown+")");//返回 + binding.buttonCancel.setText("取消 " + countdown + "秒"); } public void setStatusText(String message) { diff --git a/app/src/main/res/color/color_input_mode_bg.xml b/app/src/main/res/color/color_input_mode_bg.xml new file mode 100644 index 0000000..b65f4e8 --- /dev/null +++ b/app/src/main/res/color/color_input_mode_bg.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/color/color_input_mode_text.xml b/app/src/main/res/color/color_input_mode_text.xml new file mode 100644 index 0000000..55d3170 --- /dev/null +++ b/app/src/main/res/color/color_input_mode_text.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_input_outline.xml b/app/src/main/res/drawable/bg_input_outline.xml new file mode 100644 index 0000000..12c5355 --- /dev/null +++ b/app/src/main/res/drawable/bg_input_outline.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_rounded_card_surface.xml b/app/src/main/res/drawable/bg_rounded_card_surface.xml new file mode 100644 index 0000000..0a5b02a --- /dev/null +++ b/app/src/main/res/drawable/bg_rounded_card_surface.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_rounded_surface.xml b/app/src/main/res/drawable/bg_rounded_surface.xml new file mode 100644 index 0000000..19f9c30 --- /dev/null +++ b/app/src/main/res/drawable/bg_rounded_surface.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_segmented_container.xml b/app/src/main/res/drawable/bg_segmented_container.xml new file mode 100644 index 0000000..c424ff0 --- /dev/null +++ b/app/src/main/res/drawable/bg_segmented_container.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/keyboard_alt_24.xml b/app/src/main/res/drawable/keyboard_alt_24.xml new file mode 100644 index 0000000..e1426ba --- /dev/null +++ b/app/src/main/res/drawable/keyboard_alt_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/keyboard_backspace_24.xml b/app/src/main/res/drawable/keyboard_backspace_24.xml new file mode 100644 index 0000000..c9953b3 --- /dev/null +++ b/app/src/main/res/drawable/keyboard_backspace_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/qr_code_scanner_24.xml b/app/src/main/res/drawable/qr_code_scanner_24.xml new file mode 100644 index 0000000..29d28d1 --- /dev/null +++ b/app/src/main/res/drawable/qr_code_scanner_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/dialog_pickup_code_fontend.xml b/app/src/main/res/layout/dialog_pickup_code_fontend.xml index 9e65dbf..b15c312 100644 --- a/app/src/main/res/layout/dialog_pickup_code_fontend.xml +++ b/app/src/main/res/layout/dialog_pickup_code_fontend.xml @@ -6,12 +6,12 @@ android:layout_height="match_parent" android:background="@color/transparent"> - @@ -38,6 +41,7 @@ android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:gravity="center_vertical" + android:visibility="gone" android:orientation="horizontal"> + + + + + + + - + + android:orientation="vertical"> + + + + + + + @@ -246,56 +205,43 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" + android:clipChildren="false" + android:clipToPadding="false" android:orientation="horizontal"> + + style="@style/Widget.App.KeypadButton" + android:layout_marginEnd="12dp" + app:icon="@drawable/close_24" /> + + + style="@style/Widget.App.KeypadButton" + app:icon="@drawable/keyboard_backspace_24" /> + + + + @@ -304,15 +250,25 @@ android:layout_height="80dp" android:layout_marginTop="16dp" android:gravity="center" + android:clipChildren="false" + android:clipToPadding="false" android:orientation="horizontal"> - - \ No newline at end of file + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 0ce46ca..89632e1 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -71,4 +71,44 @@ 72dp + + + + + + \ No newline at end of file From e331e399bc7592f9375149e1b093563378d06a42 Mon Sep 17 00:00:00 2001 From: TaiwanStar Developer Date: Fri, 12 Jun 2026 12:16:08 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat(ui):=20=E7=B5=B1=E4=B8=80=E4=BE=86?= =?UTF-8?q?=E5=BA=97=E7=A6=AE=E8=88=87=E9=80=9A=E8=A1=8C=E7=A2=BC=E7=9A=84?= =?UTF-8?q?=E5=B0=8D=E8=A9=B1=E6=A1=86=E6=A8=A3=E5=BC=8F=E8=88=87=E8=BC=B8?= =?UTF-8?q?=E5=85=A5=E6=A8=A1=E5=BC=8F=E5=88=87=E6=8F=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 參照取貨碼對話框 (dialog_pickup_code_fontend) 重新設計 dialog_free_gift_code.xml 與 dialog_access_code.xml - 於 CheckoutFreeGiftCodeDialog 與 CheckoutAccessCodeDialog 加入鍵盤輸入與掃描條碼之模式切換邏輯 (btnModeKeypad / btnModeScan) --- .../ui/dialog/CheckoutAccessCodeDialog.java | 20 + .../ui/dialog/CheckoutFreeGiftCodeDialog.java | 20 + .../main/res/layout/dialog_access_code.xml | 276 ++++++------ .../main/res/layout/dialog_free_gift_code.xml | 406 +++++++++++------- 4 files changed, 417 insertions(+), 305 deletions(-) diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutAccessCodeDialog.java b/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutAccessCodeDialog.java index 6244a70..dd613b0 100644 --- a/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutAccessCodeDialog.java +++ b/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutAccessCodeDialog.java @@ -144,6 +144,18 @@ public class CheckoutAccessCodeDialog extends DialogAbstract { openBarcode = true; httpAPI = new HttpAPI(getHandlerMain()); + setInputMode(true); + + binding.btnModeKeypad.setOnClickListener(v -> { + setInputMode(true); + if (closeDialogCountdown != null) closeDialogCountdown.setCountdown(40); + }); + + binding.btnModeScan.setOnClickListener(v -> { + setInputMode(false); + if (closeDialogCountdown != null) closeDialogCountdown.setCountdown(40); + }); + binding.buttonFinish.setOnClickListener(v -> changeOk()); binding.buttonCancel.setOnClickListener(v -> changeBuy()); @@ -297,6 +309,14 @@ public class CheckoutAccessCodeDialog extends DialogAbstract { } } + private void setInputMode(boolean isKeyboard) { + binding.btnModeKeypad.setSelected(isKeyboard); + binding.btnModeScan.setSelected(!isKeyboard); + + binding.linearNumpad.setVisibility(isKeyboard ? android.view.View.VISIBLE : android.view.View.GONE); + binding.imageViewScanHint.setVisibility(isKeyboard ? android.view.View.GONE : android.view.View.VISIBLE); + } + public int getTotalPrice() { int totalPrice = 0; if (MyApp.getInstance().getBuyList().size() == 0) return totalPrice; diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutFreeGiftCodeDialog.java b/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutFreeGiftCodeDialog.java index 94aa446..7b753eb 100644 --- a/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutFreeGiftCodeDialog.java +++ b/app/src/main/java/com/unibuy/smartdevice/ui/dialog/CheckoutFreeGiftCodeDialog.java @@ -137,6 +137,18 @@ public class CheckoutFreeGiftCodeDialog extends DialogAbstract { openBarcode = true; httpAPI = new HttpAPI(getHandlerMain()); + setInputMode(true); + + binding.btnModeKeypad.setOnClickListener(v -> { + setInputMode(true); + if (closeDialogCountdown != null) closeDialogCountdown.setCountdown(40); + }); + + binding.btnModeScan.setOnClickListener(v -> { + setInputMode(false); + if (closeDialogCountdown != null) closeDialogCountdown.setCountdown(40); + }); + binding.buttonFinish.setOnClickListener(v -> changeOk()); binding.buttonCancel.setOnClickListener(v -> changeBuy()); @@ -287,6 +299,14 @@ public class CheckoutFreeGiftCodeDialog extends DialogAbstract { } } + private void setInputMode(boolean isKeyboard) { + binding.btnModeKeypad.setSelected(isKeyboard); + binding.btnModeScan.setSelected(!isKeyboard); + + binding.linearNumpad.setVisibility(isKeyboard ? android.view.View.VISIBLE : android.view.View.GONE); + binding.imageViewScanHint.setVisibility(isKeyboard ? android.view.View.GONE : android.view.View.VISIBLE); + } + public int getTotalPrice() { int totalPrice = 0; if (MyApp.getInstance().getBuyList().size() == 0) return totalPrice; diff --git a/app/src/main/res/layout/dialog_access_code.xml b/app/src/main/res/layout/dialog_access_code.xml index 1e96a05..829892b 100644 --- a/app/src/main/res/layout/dialog_access_code.xml +++ b/app/src/main/res/layout/dialog_access_code.xml @@ -6,12 +6,12 @@ android:layout_height="match_parent" android:background="@color/transparent"> - + + + + + + + - + + android:orientation="vertical"> + + + + + + + @@ -245,56 +205,43 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" + android:clipChildren="false" + android:clipToPadding="false" android:orientation="horizontal"> + + style="@style/Widget.App.KeypadButton" + android:layout_marginEnd="12dp" + app:icon="@drawable/close_24" /> + + + style="@style/Widget.App.KeypadButton" + app:icon="@drawable/keyboard_backspace_24" /> + + + + @@ -303,15 +250,25 @@ android:layout_height="80dp" android:layout_marginTop="16dp" android:gravity="center" + android:clipChildren="false" + android:clipToPadding="false" android:orientation="horizontal"> - + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_free_gift_code.xml b/app/src/main/res/layout/dialog_free_gift_code.xml index 44a68a3..16eb7a9 100644 --- a/app/src/main/res/layout/dialog_free_gift_code.xml +++ b/app/src/main/res/layout/dialog_free_gift_code.xml @@ -3,192 +3,298 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:background="@color/light_gray"> + android:layout_height="match_parent" + android:background="@color/transparent"> - - - - - - - + android:clipChildren="false" + android:clipToPadding="false" + android:orientation="vertical" + android:paddingTop="32dp" + android:paddingBottom="24dp"> + + - - + android:text="@string/enter_gift_or_scan_qrcode" + android:textColor="@color/primary" + android:textSize="24sp" + android:textStyle="bold" /> + android:clipChildren="false" + android:clipToPadding="false" + android:paddingBottom="20dp" + android:orientation="vertical"> -