From 49d73786bf104f2d171ca1860bce9d106efa6d9d Mon Sep 17 00:00:00 2001 From: 7015725 Date: Fri, 15 May 2026 02:00:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E5=9C=A8=E8=AE=BE=E7=BD=AE=E9=A1=B5=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E6=97=B6=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: applyThemeTemplate 读/写 this.config,但设置页预览 走的是 pendingUserCfg(临时编辑缓存),模板值在选择后只写入了 pendingUserCfg.THEME_TEMPLATE,applyThemeTemplate 读 this.config 则一直为 system/d 返回,导致模板不生效。 修复: - applyThemeTemplate 接受 preview 参数,预览态从 pendingUserCfg 读写,非预览态从 this.config 读写 - getPanelBgColorInt/getPanelTextColorInt 预览态优先从 pendingUserCfg 读取那4个颜色配置 --- code/th_04_theme.js | 49 +++++++++++++++++++++++++++------------------ manifest.json | 6 +++--- manifest.sig | 2 +- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/code/th_04_theme.js b/code/th_04_theme.js index 5aeecb7..c945f13 100644 --- a/code/th_04_theme.js +++ b/code/th_04_theme.js @@ -762,30 +762,31 @@ FloatBallAppWM.prototype.getThemeTemplate = function(name) { return tplMap[name] || tplMap.system; }; -// 应用主题模板:如果配置中的 4 个颜色值为空/null 且模板非 system,则用模板值填充。 -// 手动覆盖的值保持优先。 -FloatBallAppWM.prototype.applyThemeTemplate = function() { +// 应用主题模板:如果选择非 system 模板且那4个颜色未手动覆盖,用模板值填充。 +// preview=true 时从 pendingUserCfg 读/写(预览态),否则从 this.config 读/写。 +FloatBallAppWM.prototype.applyThemeTemplate = function(preview) { try { - var tpl = String(this.config.THEME_TEMPLATE || "system"); + var cfg = preview && this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config; + var tpl = String(cfg.THEME_TEMPLATE || "system"); if (tpl === "system") return; // system 走 Monet,不填充 var t = this.getThemeTemplate(tpl); - var Color = android.graphics.Color; + var _isNull = function(v) { return v == null || String(v) === "" || String(v) === "null"; }; - if (t.dayBg != null && (this.config.THEME_DAY_BG_HEX == null || String(this.config.THEME_DAY_BG_HEX) === "" || String(this.config.THEME_DAY_BG_HEX) === "null")) { - this.config.THEME_DAY_BG_HEX = String(t.dayBg); + if (t.dayBg != null && _isNull(cfg.THEME_DAY_BG_HEX)) { + cfg.THEME_DAY_BG_HEX = String(t.dayBg); } - if (t.dayText != null && (this.config.THEME_DAY_TEXT_HEX == null || String(this.config.THEME_DAY_TEXT_HEX) === "" || String(this.config.THEME_DAY_TEXT_HEX) === "null")) { - this.config.THEME_DAY_TEXT_HEX = String(t.dayText); + if (t.dayText != null && _isNull(cfg.THEME_DAY_TEXT_HEX)) { + cfg.THEME_DAY_TEXT_HEX = String(t.dayText); } - if (t.nightBg != null && (this.config.THEME_NIGHT_BG_HEX == null || String(this.config.THEME_NIGHT_BG_HEX) === "" || String(this.config.THEME_NIGHT_BG_HEX) === "null")) { - this.config.THEME_NIGHT_BG_HEX = String(t.nightBg); + if (t.nightBg != null && _isNull(cfg.THEME_NIGHT_BG_HEX)) { + cfg.THEME_NIGHT_BG_HEX = String(t.nightBg); } - if (t.nightText != null && (this.config.THEME_NIGHT_TEXT_HEX == null || String(this.config.THEME_NIGHT_TEXT_HEX) === "" || String(this.config.THEME_NIGHT_TEXT_HEX) === "null")) { - this.config.THEME_NIGHT_TEXT_HEX = String(t.nightText); + if (t.nightText != null && _isNull(cfg.THEME_NIGHT_TEXT_HEX)) { + cfg.THEME_NIGHT_TEXT_HEX = String(t.nightText); } - try { _th_log(this.L, "d", "[theme:template] applied " + tpl + " dayBg=" + String(t.dayBg) + " nightBg=" + String(t.nightBg)); } catch(eL) {} + try { _th_log(this.L, "d", "[theme:template] applied " + tpl + " dayBg=" + String(t.dayBg) + " preview=" + !!preview); } catch(eL) {} } catch(e) { try { _th_log(this.L, "e", "[theme:template] apply err=" + String(e)); } catch(eL2) {} } @@ -797,12 +798,16 @@ FloatBallAppWM.prototype.getPanelBgColorInt = function() { // 这段代码的主要内容/用途:配合"白天/夜晚"两档主题,返回统一的背景颜色(不再依赖自动亮度推断)。 // 应用主题模板(如果选择模板且用户未手动覆盖) - try { this.applyThemeTemplate(); } catch(eAT) {} + // 预览态从 pendingUserCfg 读模板值并填充 pendingUserCfg 的颜色字段 + var inPreview = this.state.pendingUserCfg != null; + try { this.applyThemeTemplate(inPreview); } catch(eAT) {} var isDark = this.isDarkTheme(); - var dayBgHex = (this.config.THEME_DAY_BG_HEX != null) ? String(this.config.THEME_DAY_BG_HEX) : null; - var nightBgHex = (this.config.THEME_NIGHT_BG_HEX != null) ? String(this.config.THEME_NIGHT_BG_HEX) : null; + // 预览态优先从 pendingUserCfg 读颜色值 + var cfg = inPreview && this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config; + var dayBgHex = (cfg.THEME_DAY_BG_HEX != null) ? String(cfg.THEME_DAY_BG_HEX) : null; + var nightBgHex = (cfg.THEME_NIGHT_BG_HEX != null) ? String(cfg.THEME_NIGHT_BG_HEX) : null; // # 兼容旧版默认配色:若仍为旧默认值,自动回退到莫奈色 if (dayBgHex === "#FAF4E3") dayBgHex = null; @@ -832,12 +837,16 @@ FloatBallAppWM.prototype.getPanelTextColorInt = function(bgInt) { // 这段代码的主要内容/用途:配合"白天/夜晚"两档主题,返回统一的文字颜色(不再依赖自动亮度推断)。 // 应用主题模板(如果选择模板且用户未手动覆盖) - try { this.applyThemeTemplate(); } catch(eAT) {} + // 预览态从 pendingUserCfg 读模板值并填充 pendingUserCfg 的颜色字段 + var inPreviewText = this.state.pendingUserCfg != null; + try { this.applyThemeTemplate(inPreviewText); } catch(eAT) {} var isDark = this.isDarkTheme(); - var dayTextHex = (this.config.THEME_DAY_TEXT_HEX != null) ? String(this.config.THEME_DAY_TEXT_HEX) : null; - var nightTextHex = (this.config.THEME_NIGHT_TEXT_HEX != null) ? String(this.config.THEME_NIGHT_TEXT_HEX) : null; + // 预览态优先从 pendingUserCfg 读颜色值 + var cfgT = inPreviewText && this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config; + var dayTextHex = (cfgT.THEME_DAY_TEXT_HEX != null) ? String(cfgT.THEME_DAY_TEXT_HEX) : null; + var nightTextHex = (cfgT.THEME_NIGHT_TEXT_HEX != null) ? String(cfgT.THEME_NIGHT_TEXT_HEX) : null; // # 兼容旧版默认配色:若仍为旧默认值,自动回退到莫奈色 if (dayTextHex === "#333333") dayTextHex = null; diff --git a/manifest.json b/manifest.json index c6611fe..d1b8dbd 100644 --- a/manifest.json +++ b/manifest.json @@ -14,8 +14,8 @@ "size": 5598 }, "th_04_theme.js": { - "sha256": "6bfa24d75ca23ba6c7f09b94492a63e8af2437be1bf25b79eb96089667935361", - "size": 41166 + "sha256": "09a6fd1087cffd0a77aa72212f1c7ce15b145bbc9084c0f159e70e02397006c6", + "size": 41425 }, "th_05_persistence.js": { "sha256": "d80787c2810839ebbe499e93db3df33d6e8d2d6b6ae71644ce351db0f36e4d3e", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260514175655 + "version": 20260514180021 } diff --git a/manifest.sig b/manifest.sig index 67da251..bf56656 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -J8sdR9Lgzp+JGjeTbDffNXNdJjoXu6tg9nUZ5Ow2J6uGSWX36ozjo1kC3p/aAtb1Ndo1x6al+CUcIOL/xg4z6gXZ1AHJksDPvSQBn7KQORGRs818WMs3r5TClWy7kt5VgLTDpyR2WyEd/NRNDVEREkPWE0MBlCWXt6HFptFNQMmEpvwdCo3RJDANzYPoHgEM6ENCahJILFyI8sbfZOAXIECV8XoYzcnYaXkqlg8ofFvVauYhRTcmSGZOQpldm1TRalHCI5XJFX44zyYtkn8+vm73OMxESeqc9wT8Gr9ZLcYzwAlBnunoHk4J0sCQtJZvFm5b62WCGPl4wsE8fWQzUDMuF2a/Mtth3BhayvoY9XseqMT/IbwPgPgOColrJPn6GX9/XtGg3Zd+7GYL7tpj89uZdER/3vqqEY8SfOq8vONv1DOCOn6rdCyIL55UszX9vWF9T/yPeJLhl7H7wxGu/x27tY+lz0a+laAbrqB5Js5THrbHmnNnT/8hmYGCprQ3 +Ju9QZhVHF/Fckt99ViGxVKmeRnTCgXTqRMuXth2J6IRXDOX8LFxNAc2YxiPrOcIUaHKVgmH1N5mT8Yq0WQKxFJEOeSFHLx5JDsaP1RhXiF/8CfB4xPP6GitJdFlvySkJlEL3INuDHEUal2v31e62XUdvxigBIn6s2SIRxqy6IAFEWrny17rO784znlAeZf87fHL8vpAvAzXLTKB1PbuwHtU9rMywv68VHG1/al5W51BHWuXf7BxbEelK5KvjyZ37VCteI9zCOM3gRswVqKjg5A5fM9sU7Q9pV18Xd7PNtVSTchpnPK5oKjxNR36Ui1yI8aGSwemf/vGpyZDmfuVuPUb3qLxtJt9LQifRREYuZjQXdtehfIh8hRd7x+pw++piJbU/9V7++81a4I3aODhZsyG/A7I5MnMwqB0V6BFEWIDPpUxz/6vPYCscQQsQ7B58B9Pff0ygdqRkBBHJVP+2X1RA8g5GUxLN8IxFWAtMBLoWvintx9IezxHTUkb90bQQ