[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。
This commit is contained in:
parent
f700881788
commit
89c7d04f7a
@ -10,7 +10,7 @@ plugins {
|
||||
// 避免不同尺寸機台間版本號產生衝突。
|
||||
// =========================================================================
|
||||
def verMinor = 1
|
||||
def verPatch = 93
|
||||
def verPatch = 94
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1130,7 +1130,12 @@ public class StarCloudAPI {
|
||||
Log.i(TAG, "persistCurrentSettings() - Saving to DB: machineID=" + MyApp.getInstance().getMachine().getMachineID()
|
||||
+ ", token=" + MyApp.getInstance().getMachine().getApiKey());
|
||||
SettingsDao settingsDao = new SettingsDao(handlerMain.getContext());
|
||||
settingsDao.deleteAll();
|
||||
// 只刪除本方法接下來要重寫的這 4 個設定 key,避免 deleteAll() 連坐刪掉廣告(VideoEoxPlayer)等其他持久資料。
|
||||
// 否則「遠端更新設定→重啟」會因廣告列被清空且啟動不會主動抓 B005,導致廣告消失。
|
||||
settingsDao.deleteWhere(MyApp.getInstance().getMachine().getClass().getSimpleName());
|
||||
settingsDao.deleteWhere(MyApp.getInstance().getEsunpay().getClass().getSimpleName());
|
||||
settingsDao.deleteWhere(MyApp.getInstance().getGreenInvoice().getClass().getSimpleName());
|
||||
settingsDao.deleteWhere(MyApp.getInstance().getGreenpaySetting().getClass().getSimpleName());
|
||||
|
||||
settingsDao.insertOne(new SettingStructure(MyApp.getInstance().getMachine().getClass().getSimpleName(),
|
||||
new String[] {
|
||||
|
||||
@ -335,8 +335,8 @@ public class FontendActivity extends AppCompatActivityAbstract implements SaleFl
|
||||
getLogs().update("Temperature", String.valueOf(DevXinYuanController.getTemperature()), "℃");
|
||||
|
||||
// 同步更新機台資訊列
|
||||
binding.textMachineInfoName.setText(MyApp.getInstance().getMachine().getMachineID());
|
||||
// 待日後動態更改:binding.textMachineInfoNetwork.setText(getString(R.string.network) + ":" + networkDevice);
|
||||
updateMachineInfoName();
|
||||
updateMachineInfoNetwork();
|
||||
binding.textMachineInfoTemperature.setText(getString(R.string.temp) + ":" + tempStr);
|
||||
|
||||
try {
|
||||
@ -392,7 +392,7 @@ public class FontendActivity extends AppCompatActivityAbstract implements SaleFl
|
||||
case SET_NETWORK:
|
||||
getLogs().info("網路:" + message);
|
||||
binding.textNetwork.setText(message);
|
||||
// 待日後動態更改:binding.textMachineInfoNetwork.setText(message);
|
||||
updateMachineInfoNetwork();
|
||||
break;
|
||||
case RESET_SLOTNO:
|
||||
new ResetSlotNo(this).start();
|
||||
@ -642,6 +642,80 @@ public class FontendActivity extends AppCompatActivityAbstract implements SaleFl
|
||||
return -1; // 無法獲取訊號強度
|
||||
}
|
||||
|
||||
/** 取得 App 版本名稱(versionName),取不到時回 "0"。 */
|
||||
private String getAppVersionName() {
|
||||
try {
|
||||
return getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
|
||||
/** 機台資訊列左側:顯示「序號 + 版本號」。 */
|
||||
private void updateMachineInfoName() {
|
||||
if (binding == null) {
|
||||
return;
|
||||
}
|
||||
binding.textMachineInfoName.setText(
|
||||
MyApp.getInstance().getMachine().getMachineID() + " Ver " + getAppVersionName());
|
||||
}
|
||||
|
||||
/**
|
||||
* 依系統/下位機回報的網路狀態,動態更新機台資訊列的網路訊號 icon 與文字。
|
||||
* WiFi 依 RSSI(dBm) 分 1~3 格與滿格;行動網路(SIM) 依 dBm 分 0~4 格;無網路顯示 0 格。
|
||||
*/
|
||||
private void updateMachineInfoNetwork() {
|
||||
if (binding == null) {
|
||||
return;
|
||||
}
|
||||
int iconRes = R.drawable.signal_cellular_0_bar_24; // 預設:無網路
|
||||
String label = getString(R.string.no_internet);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
Network network = connectivityManager.getActiveNetwork();
|
||||
NetworkCapabilities capabilities = (network != null)
|
||||
? connectivityManager.getNetworkCapabilities(network) : null;
|
||||
if (capabilities != null
|
||||
&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
|
||||
&& capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
|
||||
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
|
||||
int rssi = 0; // 0 代表系統未提供強度
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
rssi = capabilities.getSignalStrength();
|
||||
}
|
||||
iconRes = wifiIconByRssi(rssi);
|
||||
label = getString(R.string.wireless_internet);
|
||||
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
|
||||
iconRes = cellularIconByDbm(getMobileSignalStrength());
|
||||
label = getString(R.string.mobile_network);
|
||||
} else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) {
|
||||
iconRes = R.drawable.network_wifi_24; // 有線:以滿格示意連線正常
|
||||
label = getString(R.string.wired_internet);
|
||||
}
|
||||
}
|
||||
}
|
||||
binding.textMachineInfoNetwork.setText(label);
|
||||
binding.textMachineInfoNetwork.setCompoundDrawablesRelativeWithIntrinsicBounds(iconRes, 0, 0, 0);
|
||||
}
|
||||
|
||||
/** WiFi RSSI(dBm) → icon;數字越接近 0 越強,rssi==0 視為未提供強度回滿格。 */
|
||||
private int wifiIconByRssi(int rssi) {
|
||||
if (rssi == 0 || rssi >= -55) return R.drawable.network_wifi_24; // 滿格
|
||||
if (rssi >= -66) return R.drawable.network_wifi_3_bar_24; // 等級3
|
||||
if (rssi >= -77) return R.drawable.network_wifi_2_bar_24; // 等級2
|
||||
return R.drawable.network_wifi_1_bar_24; // 等級1
|
||||
}
|
||||
|
||||
/** 行動網路 dBm → icon;數字越接近 0 越強,-1 代表取不到訊號。 */
|
||||
private int cellularIconByDbm(int dbm) {
|
||||
if (dbm == -1) return R.drawable.signal_cellular_0_bar_24; // 無網路
|
||||
if (dbm >= -85) return R.drawable.signal_cellular_4_bar_24; // 滿格
|
||||
if (dbm >= -95) return R.drawable.signal_cellular_3_bar_24; // 等級3
|
||||
if (dbm >= -105) return R.drawable.signal_cellular_2_bar_24; // 等級2
|
||||
if (dbm >= -115) return R.drawable.signal_cellular_1_bar_24; // 等級1
|
||||
return R.drawable.signal_cellular_0_bar_24; // 無網路
|
||||
}
|
||||
|
||||
private void setBottomNavigation() {
|
||||
vmcFragment = new VmcFragment(getHandlerMain());
|
||||
activeFragment = vmcFragment;
|
||||
@ -772,8 +846,9 @@ public class FontendActivity extends AppCompatActivityAbstract implements SaleFl
|
||||
binding.btnswitchlanTW.setOnClickListener(v -> showLanguagePicker());
|
||||
// 新增:機台資訊列的語言按鈕
|
||||
binding.textMachineInfoLang.setOnClickListener(v -> showLanguagePicker());
|
||||
// 機台資訊列一動就顯示機台 ID
|
||||
binding.textMachineInfoName.setText(MyApp.getInstance().getMachine().getMachineID());
|
||||
// 機台資訊列:顯示序號 + 版本號
|
||||
updateMachineInfoName();
|
||||
updateMachineInfoNetwork();
|
||||
String currentLang = LanguageHelper.getSavedLanguage(this);
|
||||
binding.textMachineInfoLangText.setText(LanguageHelper.getDisplayName(currentLang));
|
||||
|
||||
@ -785,7 +860,8 @@ public class FontendActivity extends AppCompatActivityAbstract implements SaleFl
|
||||
finish();
|
||||
};
|
||||
|
||||
binding.textNetwork.setOnTouchListener((v, event) -> {
|
||||
// 後門已遷至機台資訊列的「序號 + 版本號」元素(舊的 textNetwork 整條系統列已隱藏,不再接收觸控)
|
||||
binding.textMachineInfoName.setOnTouchListener((v, event) -> {
|
||||
switch (event.getAction()) {
|
||||
case android.view.MotionEvent.ACTION_DOWN:
|
||||
networkHandler.postDelayed(networkRunnable, 2000); // 2秒
|
||||
@ -843,7 +919,8 @@ public class FontendActivity extends AppCompatActivityAbstract implements SaleFl
|
||||
binding.btnswitchlanJa.setVisibility(View.GONE);
|
||||
binding.btnswitchlanTW.setOnClickListener(v -> showLanguagePicker());
|
||||
binding.textMachineInfoLang.setOnClickListener(v -> showLanguagePicker());
|
||||
binding.textMachineInfoName.setText(MyApp.getInstance().getMachine().getMachineID());
|
||||
updateMachineInfoName();
|
||||
updateMachineInfoNetwork();
|
||||
String currentLang = LanguageHelper.getSavedLanguage(this);
|
||||
binding.textMachineInfoLangText.setText(LanguageHelper.getDisplayName(currentLang));
|
||||
}
|
||||
|
||||
@ -111,9 +111,9 @@
|
||||
android:layout_weight="1"
|
||||
android:gravity="start|center_vertical"
|
||||
android:text="--"
|
||||
android:textColor="@color/primary"
|
||||
android:textSize="27sp"
|
||||
android:textStyle="bold"
|
||||
android:textColor="@color/gray"
|
||||
android:textSize="14sp"
|
||||
android:alpha="0.7"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="end" />
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user