From 65dd123d0c3d83578c96a44baa0e50912ed2f1bc Mon Sep 17 00:00:00 2001 From: sky121113 Date: Fri, 15 May 2026 12:55:15 +0800 Subject: [PATCH] =?UTF-8?q?[FEAT]=20=E5=AF=A6=E4=BD=9C=E6=A9=9F=E5=99=A8?= =?UTF-8?q?=E9=80=A3=E7=B7=9A=E7=92=B0=E5=A2=83=E5=88=87=E6=8F=9B=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=20(Demo=20vs=20=E6=AD=A3=E5=BC=8F=E7=AB=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 在 activity_setting.xml 新增環境切換單選鈕 (RadioGroup)。 2. 修改 SettingActivity.java 處理環境切換邏輯與 UI 初始化。 3. 修改 MachineStructure.java 新增 mqttEnv 欄位以儲存環境狀態。 4. 修改 MyApp.java 在啟動時從資料庫載入環境設定。 5. 修改 StarCloudAPI.java 使 API BASE_URL 根據環境設定動態切換。 6. 修改 MqttManager.java 使 MQTT Broker Host 根據環境設定動態切換。 7. 更新正式站 API (starcloud.taiwan-star.com.tw) 與 MQTT (emqx.taiwan-star.com.tw) 位址。 --- .../java/com/unibuy/smartdevice/MyApp.java | 3 +++ .../smartdevice/external/StarCloudAPI.java | 24 +++++++++++------- .../external/mqtt/MqttManager.java | 7 +++++- .../structure/MachineStructure.java | 9 +++++++ .../smartdevice/ui/SettingActivity.java | 11 ++++++++ app/src/main/res/layout/activity_setting.xml | 25 ++++++++++++++++++- 6 files changed, 68 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/unibuy/smartdevice/MyApp.java b/app/src/main/java/com/unibuy/smartdevice/MyApp.java index 6009a86..e920199 100644 --- a/app/src/main/java/com/unibuy/smartdevice/MyApp.java +++ b/app/src/main/java/com/unibuy/smartdevice/MyApp.java @@ -440,6 +440,9 @@ public class MyApp extends Application { logs.info("initialSettingData Machine:" + setting.toString()); MyApp.getInstance().getMachine().setApiKey(setting.getData(0)); MyApp.getInstance().getMachine().setMachineID(setting.getData(1)); + if (setting.getDataCount() >= 3 && setting.getData(2) != null && !setting.getData(2).isEmpty()) { + MyApp.getInstance().getMachine().setMqttEnv(setting.getData(2)); + } } } diff --git a/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java b/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java index 80310bd..e4a004e 100644 --- a/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java +++ b/app/src/main/java/com/unibuy/smartdevice/external/StarCloudAPI.java @@ -35,8 +35,13 @@ import java.util.ArrayList; public class StarCloudAPI { private static final String TAG = "StarCloudAPI"; - // Star-Cloud API 基礎路徑 - private static final String BASE_URL = "https://demo-cloud.setdomains.work/api/v1/app/"; + private String getBaseUrl() { + if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) { + return "https://starcloud.taiwan-star.com.tw/api/v1/app/"; + } else { + return "https://demo-cloud.setdomains.work/api/v1/app/"; + } + } private HandlerMain handlerMain; private HandlerMain srcHandlerMain; @@ -51,7 +56,7 @@ public class StarCloudAPI { */ public void login(final String account, final String password) { Log.i(TAG, "login() called for account: " + account); - final String url = BASE_URL + "admin/login/B000"; + final String url = getBaseUrl() + "admin/login/B000"; Log.i(TAG, "Starting B000 request to: " + url); // 不依賴 FormPostMainScheduler (會靜默吞掉 IO exception) @@ -156,7 +161,7 @@ public class StarCloudAPI { return; } - final String url = BASE_URL + "machine/setting/B014?machine=" + machineId; + final String url = getBaseUrl() + "machine/setting/B014?machine=" + machineId; Log.i(TAG, "Starting B014 request to: " + url); new Thread(new Runnable() { @@ -242,7 +247,7 @@ public class StarCloudAPI { * 需要 Bearer Token 認證。 */ public void downloadProductInfo() { - final String url = BASE_URL + "machine/products/B012"; + final String url = getBaseUrl() + "machine/products/B012"; Log.i(TAG, "Starting B012 request to: " + url); new Thread(new Runnable() { @@ -336,7 +341,7 @@ public class StarCloudAPI { * 需要 Bearer Token 認證。 */ public void reportSlotList(final ReportSlotListStructure data) { - final String url = BASE_URL + "products/supplementary/B009"; + final String url = getBaseUrl() + "products/supplementary/B009"; Log.i(TAG, "Starting B009 request to: " + url); new Thread(new Runnable() { @@ -449,7 +454,7 @@ public class StarCloudAPI { */ public void verifyStaffCard(final String cardNo, final VerificationCallback callback) { final String machineId = MyApp.getInstance().getMachine().getMachineID(); - final String url = BASE_URL + "machine/staff/verify/B680"; + final String url = getBaseUrl() + "machine/staff/verify/B680"; Log.i(TAG, "Starting B680 request for card: " + cardNo); new Thread(new Runnable() { @@ -595,7 +600,8 @@ public class StarCloudAPI { settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getMachine().getClass().getSimpleName(), new String[] { MyApp.getInstance().getMachine().getApiKey(), - MyApp.getInstance().getMachine().getMachineID() + MyApp.getInstance().getMachine().getMachineID(), + MyApp.getInstance().getMachine().getMqttEnv() })); settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getEsunpay().getClass().getSimpleName(), @@ -689,7 +695,7 @@ public class StarCloudAPI { } public void downloadAdvertisement(final Runnable onComplete) { - final String url = BASE_URL + "machine/ad/B005"; + final String url = getBaseUrl() + "machine/ad/B005"; Log.i(TAG, "Starting B005 request to: " + url); new Thread(new Runnable() { diff --git a/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java b/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java index ef339bc..f062808 100644 --- a/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java +++ b/app/src/main/java/com/unibuy/smartdevice/external/mqtt/MqttManager.java @@ -78,10 +78,15 @@ public class MqttManager { } } + String serverHost = "mqtt.setdomains.work"; + if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) { + serverHost = "emqx.taiwan-star.com.tw"; + } + client = MqttClient.builder() .useMqttVersion3() .identifier(clientId) - .serverHost("mqtt.setdomains.work") + .serverHost(serverHost) .serverPort(443) .useSslWithDefaultConfig() .webSocketConfig() diff --git a/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java b/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java index 10d5e76..b6d3cc8 100644 --- a/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java +++ b/app/src/main/java/com/unibuy/smartdevice/structure/MachineStructure.java @@ -3,6 +3,7 @@ package com.unibuy.smartdevice.structure; public class MachineStructure { private String apiKey = "KahnEwjhfDBHUYS7"; private String machineID; + private String mqttEnv = "demo"; public MachineStructure(String machineID) { this.machineID = machineID; } @@ -27,4 +28,12 @@ public class MachineStructure { public void setMachineID(String machineID) { this.machineID = machineID; } + + public String getMqttEnv() { + return mqttEnv; + } + + public void setMqttEnv(String mqttEnv) { + this.mqttEnv = mqttEnv; + } } diff --git a/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java b/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java index 563b37d..659ac00 100644 --- a/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java +++ b/app/src/main/java/com/unibuy/smartdevice/ui/SettingActivity.java @@ -96,6 +96,11 @@ public class SettingActivity extends AppCompatActivityAbstract { case DATA_RELOAD: binding.buttonBack.setVisibility(View.INVISIBLE); MyApp.getInstance().getMachine().setMachineID(binding.editMachineID.getText().toString()); + if (binding.radioProd.isChecked()) { + MyApp.getInstance().getMachine().setMqttEnv("prod"); + } else { + MyApp.getInstance().getMachine().setMqttEnv("demo"); + } binding.progressLayout.setVisibility(View.VISIBLE); // 確保進度條顯示 try { starCloudAPI.downloadSetting(); @@ -167,6 +172,12 @@ public class SettingActivity extends AppCompatActivityAbstract { binding.buttonReload.setText("重新綁定"); } + if ("prod".equals(MyApp.getInstance().getMachine().getMqttEnv())) { + binding.radioProd.setChecked(true); + } else { + binding.radioDemo.setChecked(true); + } + if (statusList.isEmpty()) { SettinglogsDao settinglogsDao = new SettinglogsDao(this); for (String data : settinglogsDao.getAll()) { diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index e5b3dde..6bf830d 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -29,13 +29,36 @@ android:inputType="text" /> + + + + + + app:layout_constraintTop_toBottomOf="@+id/radioGroupMqttEnv">