From 8907a2d5d83497391ab87e895770d6b4ce470e8e Mon Sep 17 00:00:00 2001 From: 7015725 Date: Thu, 14 May 2026 23:17:09 +0800 Subject: [PATCH] style: soften animal island ToolApp copy --- code/th_04_theme.js | 32 +++++++-------- code/th_14_panels.js | 55 ++++++++++++-------------- code/th_15_extra.js | 12 +++--- manifest.json | 12 +++--- manifest.sig | 2 +- scripts/verify_button_editor_layout.py | 2 +- 6 files changed, 56 insertions(+), 59 deletions(-) diff --git a/code/th_04_theme.js b/code/th_04_theme.js index 869930c..c190a55 100644 --- a/code/th_04_theme.js +++ b/code/th_04_theme.js @@ -17,22 +17,22 @@ FloatBallAppWM.prototype.getAnimalIslandTheme = function() { var Color = android.graphics.Color; if (isDark) { return { - bg: Color.parseColor("#1F2E29"), - bg2: Color.parseColor("#263A33"), - leaf: Color.parseColor("#31564A"), - card: Color.parseColor("#2F4037"), - card2: Color.parseColor("#3A4B40"), - cream: Color.parseColor("#FFF4D8"), - text: Color.parseColor("#FFF4D8"), - sub: Color.parseColor("#D8C6A6"), - brown: Color.parseColor("#A9855E"), - primary: Color.parseColor("#62D7C6"), - primaryDeep: Color.parseColor("#19A89A"), - primarySoft: Color.parseColor("#2C5C55"), - danger: Color.parseColor("#F08A86"), - dangerSoft: Color.parseColor("#5A3432"), - stroke: Color.parseColor("#66563F"), - onPrimary: Color.parseColor("#17352F") + bg: Color.parseColor("#2F4034"), + bg2: Color.parseColor("#3C5142"), + leaf: Color.parseColor("#4E6F5B"), + card: Color.parseColor("#405243"), + card2: Color.parseColor("#4A5D4E"), + cream: Color.parseColor("#FFF1D2"), + text: Color.parseColor("#FFF1D2"), + sub: Color.parseColor("#E3CFA8"), + brown: Color.parseColor("#D0AE7A"), + primary: Color.parseColor("#8BD7A8"), + primaryDeep: Color.parseColor("#5FB980"), + primarySoft: Color.parseColor("#3F684F"), + danger: Color.parseColor("#F0A08F"), + dangerSoft: Color.parseColor("#68453C"), + stroke: Color.parseColor("#8B754E"), + onPrimary: Color.parseColor("#173524") }; } return { diff --git a/code/th_14_panels.js b/code/th_14_panels.js index 1c519df..c8384b2 100644 --- a/code/th_14_panels.js +++ b/code/th_14_panels.js @@ -1,11 +1,11 @@ // @version 1.0.0 FloatBallAppWM.prototype.getSettingsGroupDefs = function() { return [ - { key: "ball", title: "悬浮球", desc: "大小、图标、透明度、球与面板间距", sections: ["悬浮球"] }, - { key: "panel", title: "面板", desc: "行列、间距、文字、位置与吸边", sections: ["面板布局", "面板文字", "吸边与位置"] }, - { key: "theme", title: "主题与外观", desc: "明暗主题、文字色、背景与透明度", sections: ["外观"] }, - { key: "motion", title: "动画与手势", desc: "吸边动画、回弹、点击/长按手势", sections: ["动画", "触摸与手势"] }, - { key: "debug", title: "日志与调试", desc: "日志开关、DEBUG 与保留天数", sections: ["日志"] } + { key: "ball", title: "漂浮气球", desc: "设置小球伙伴的大小、图标和跟随距离", sections: ["悬浮球"] }, + { key: "panel", title: "工具小屋", desc: "调整面板排列、文字、位置和吸边", sections: ["面板布局", "面板文字", "吸边与位置"] }, + { key: "theme", title: "换装与装饰", desc: "更换明暗主题、文字色、背景和透明度", sections: ["外观"] }, + { key: "motion", title: "动作与手势", desc: "设置点击、长按、回弹和吸边动画", sections: ["动画", "触摸与手势"] }, + { key: "debug", title: "岛务记录", desc: "查看运行记录和高级调试选项", sections: ["日志"] } ]; }; @@ -133,12 +133,9 @@ FloatBallAppWM.prototype.buildSettingsHomePanelView = function() { memTv.setText("Mem " + used.toFixed(0) + "/" + max.toFixed(0) + "M"); } catch(e) { memTv.setText("Mem ?"); } } - updateMem(); - memTv.setOnClickListener(new android.view.View.OnClickListener({ onClick: function() { updateMem(); self.toast("内存已刷新"); }})); - quick.addView(memTv); quick.addView(this.ui.createSpacer(this)); - var btnDoc = this.ui.createFlatButton(this, "文档", T.brown, function() { + var btnDoc = this.ui.createFlatButton(this, "岛务手册", T.brown, function() { try { var intent = new android.content.Intent(android.content.Intent.ACTION_VIEW); intent.setData(android.net.Uri.parse("https://xin-blog.com/114.html")); @@ -148,7 +145,7 @@ FloatBallAppWM.prototype.buildSettingsHomePanelView = function() { }); quick.addView(btnDoc); - var btnSave = this.ui.createSolidButton(this, "保存", T.primary, T.onPrimary, function() { + var btnSave = this.ui.createSolidButton(this, "保存布置", T.primary, T.onPrimary, function() { try { self.touchActivity(); var r = self.commitPendingUserCfg(); @@ -191,7 +188,7 @@ FloatBallAppWM.prototype.buildSettingsHomePanelView = function() { titleMain.setGravity(android.view.Gravity.CENTER); titleCard.addView(titleMain, new android.widget.LinearLayout.LayoutParams(-1, -2)); var titleSub = new android.widget.TextView(context); - titleSub.setText("温暖风格控制中心"); + titleSub.setText("今天也来整理你的小工具吧"); titleSub.setTextColor(T.sub); titleSub.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); titleSub.setGravity(android.view.Gravity.CENTER); @@ -206,7 +203,7 @@ FloatBallAppWM.prototype.buildSettingsHomePanelView = function() { statCard.setPadding(this.dp(10), 0, this.dp(10), 0); statCard.setBackground(this.ui.createStrokeDrawable(T.primarySoft, this.withAlpha(T.primaryDeep, isDark ? 0.34 : 0.24), this.dp(1), this.dp(20))); var statLabel = new android.widget.TextView(context); - statLabel.setText("按钮启用"); + statLabel.setText("工具伙伴"); statLabel.setTextColor(T.sub); statLabel.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); statLabel.setGravity(android.view.Gravity.CENTER); @@ -232,8 +229,8 @@ FloatBallAppWM.prototype.buildSettingsHomePanelView = function() { scroll.addView(box); scroll.setOnTouchListener(new JavaAdapter(android.view.View.OnTouchListener, { onTouch: function(v, e) { self.touchActivity(); return false; }})); - this.createSettingsHomeEntry(box, "按钮管理", "新增、编辑、排序、启用/禁用工具按钮", "管理", function() { self.pushToolAppPage("btn_editor"); }); - this.createSettingsHomeEntry(box, "布局管理", "自定义设置项 schema,适合高级调整", "管理", function() { self.pushToolAppPage("schema_editor"); }); + this.createSettingsHomeEntry(box, "工具小屋", "添加、整理、安排你的工具伙伴", "整理", function() { self.pushToolAppPage("btn_editor"); }); + this.createSettingsHomeEntry(box, "岛屿蓝图", "调整设置项蓝图,适合高级布置", "管理", function() { self.pushToolAppPage("schema_editor"); }); var defs = this.getSettingsGroupDefs(); for (var i = 0; i < defs.length; i++) { (function(d) { @@ -858,7 +855,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { // 提示文字 (左侧) var hintTv = new android.widget.TextView(context); - hintTv.setText("共 " + buttons.length + " 个按钮"); + hintTv.setText("共 " + buttons.length + " 个工具伙伴"); hintTv.setTextColor(subTextColor); hintTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); header.addView(hintTv); @@ -867,7 +864,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { header.addView(self.ui.createSpacer(self)); // 新增按钮 (右侧) - var btnAdd = self.ui.createSolidButton(self, "新增", T.primary, T.onPrimary, function() { + var btnAdd = self.ui.createSolidButton(self, "添加", T.primary, T.onPrimary, function() { self.state.editingButtonIndex = -1; if (self.state.toolAppActive && self.pushToolAppPage) self.pushToolAppPage("btn_editor"); else refreshPanel(); @@ -898,7 +895,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { var searchRow = new android.widget.LinearLayout(context); searchRow.setOrientation(android.widget.LinearLayout.HORIZONTAL); searchRow.setGravity(android.view.Gravity.CENTER_VERTICAL); - var searchInput = self.ui.createInputGroup(self, "搜索按钮", self.state.buttonManagerQuery || "", false, "标题 / 类型 / 包名 / 命令"); + var searchInput = self.ui.createInputGroup(self, "寻找工具", self.state.buttonManagerQuery || "", false, "名称 / 类型 / 包名 / 命令"); var searchInputLp = new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); searchInputLp.weight = 1; searchRow.addView(searchInput.view, searchInputLp); @@ -910,7 +907,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { var btnSearchLp = new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); btnSearchLp.leftMargin = self.dp(8); searchRow.addView(btnSearch, btnSearchLp); - var btnClearSearch = self.createButtonManagerActionChip("清空", subTextColor, self.withAlpha(subTextColor, 0.24), function() { + var btnClearSearch = self.createButtonManagerActionChip("重置", subTextColor, self.withAlpha(subTextColor, 0.24), function() { self.state.buttonManagerQuery = ""; self.state.btnEditorListScrollY = 0; refreshPanel(); @@ -1035,7 +1032,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { actions.setPadding(self.dp(42), 0, 0, 0); var canUp = (idx > 0); - var btnUp = self.createButtonManagerTextAction("上移", canUp ? subTextColor : self.withAlpha(subTextColor, 0.25), canUp ? function() { + var btnUp = self.createButtonManagerTextAction("上搬", canUp ? subTextColor : self.withAlpha(subTextColor, 0.25), canUp ? function() { var temp = buttons[idx]; buttons[idx] = buttons[idx - 1]; buttons[idx - 1] = temp; @@ -1045,7 +1042,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { actions.addView(btnUp); var canDown = (idx < buttons.length - 1); - var btnDown = self.createButtonManagerTextAction("下移", canDown ? subTextColor : self.withAlpha(subTextColor, 0.25), canDown ? function() { + var btnDown = self.createButtonManagerTextAction("下搬", canDown ? subTextColor : self.withAlpha(subTextColor, 0.25), canDown ? function() { var temp = buttons[idx]; buttons[idx] = buttons[idx + 1]; buttons[idx + 1] = temp; @@ -1059,7 +1056,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { } catch(eDownLp) {} actions.addView(btnDown); - var btnToggle = self.createButtonManagerTextAction(__enabled ? "禁用" : "启用", __enabled ? self.withAlpha(subTextColor, 0.9) : self.withAlpha(C.success, 0.9), function() { + var btnToggle = self.createButtonManagerTextAction(__enabled ? "暂停" : "启用", __enabled ? self.withAlpha(subTextColor, 0.9) : self.withAlpha(C.success, 0.9), function() { try { btnCfg.enabled = (btnCfg.enabled === false) ? true : false; ConfigManager.saveButtons(buttons); @@ -1073,7 +1070,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { } catch(eLpTg) {} actions.addView(btnToggle); - var btnDel = self.createButtonManagerTextAction("删除", self.withAlpha(C.danger, 0.85), function() { + var btnDel = self.createButtonManagerTextAction("移除", self.withAlpha(C.danger, 0.85), function() { buttons.splice(idx, 1); refreshPanel(); }); @@ -1140,7 +1137,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { bottomBar.setPadding(self.dp(4), self.dp(8), self.dp(4), self.dp(8)); bottomBar.setBackground(self.ui.createRoundDrawable(isDark ? C.bgDark : C.bgLight, self.dp(12))); - var btnListCancel = self.ui.createFlatButton(self, "取消更改", subTextColor, function() { + var btnListCancel = self.ui.createFlatButton(self, "不改了", subTextColor, function() { self.state.tempButtons = null; self.toast("已取消更改"); self.hideAllPanels(); @@ -1150,7 +1147,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { btnListCancelLp.rightMargin = self.dp(8); bottomBar.addView(btnListCancel, btnListCancelLp); - var btnListSave = self.ui.createSolidButton(self, "保存所有", C.primary, android.graphics.Color.WHITE, function() { + var btnListSave = self.ui.createSolidButton(self, "保存布置", T.primary, T.onPrimary, function() { try { ConfigManager.saveButtons(buttons); self.panels.main = buttons; @@ -1196,7 +1193,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { // titleLp.rightMargin = self.dp(16); // No need for margin if no icon area titleArea.setLayoutParams(titleLp); - var inputTitle = self.ui.createInputGroup(self, "标题 (Title)", targetBtn.title, false, "按钮上显示的文字"); + var inputTitle = self.ui.createInputGroup(self, "按钮名字", targetBtn.title, false, "写在按钮上的名字"); self.addButtonEditorField(titleArea, inputTitle.view); topArea.addView(titleArea); @@ -2418,7 +2415,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { } catch(eLpTW) { safeLog(null, 'e', "catch " + String(eLpTW)); } var typeLbl = new android.widget.TextView(context); - typeLbl.setText("动作类型 (Action Type)"); + typeLbl.setText("按下后要做什么"); typeLbl.setTextColor(subTextColor); typeLbl.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); typeWrap.addView(typeLbl); @@ -2598,7 +2595,7 @@ FloatBallAppWM.prototype.buildButtonEditorPanelView = function() { shellWrap.setOrientation(android.widget.LinearLayout.VERTICAL); var initCmd = targetBtn.cmd || ""; if (targetBtn.cmd_b64) initCmd = decodeBase64Utf8(targetBtn.cmd_b64) || initCmd; - var inputShell = self.ui.createInputGroup(self, "Shell 命令", initCmd, true, "支持常规 Shell 命令 (input, am, pm...)"); + var inputShell = self.ui.createInputGroup(self, "Shell 命令", initCmd, true, "input / am / pm 等命令"); shellWrap.addView(inputShell.view); // # Root 开关已移除:广播桥接收端默认以 root 执行,开关无意义 @@ -3655,7 +3652,7 @@ shortcutWrap.addView(scBody); bottomBar.setPadding(self.dp(4), self.dp(8), self.dp(4), self.dp(8)); bottomBar.setBackground(self.ui.createRoundDrawable(isDark ? C.bgDark : C.bgLight, self.dp(12))); - var btnCancel = self.ui.createFlatButton(self, "取消", subTextColor, function() { + var btnCancel = self.ui.createFlatButton(self, "不改了", subTextColor, function() { self.state.editingButtonIndex = null; if (self.state.toolAppActive && self.popToolAppPage) { self.state.keepBtnEditorState = true; @@ -3667,7 +3664,7 @@ shortcutWrap.addView(scBody); btnCancelLp.rightMargin = self.dp(8); bottomBar.addView(btnCancel, btnCancelLp); - var btnSave = self.ui.createSolidButton(self, "暂存修改", C.primary, android.graphics.Color.WHITE, function() { + var btnSave = self.ui.createSolidButton(self, "先存起来", T.primary, T.onPrimary, function() { try { var newBtn = targetBtn; newBtn.title = inputTitle.getValue(); diff --git a/code/th_15_extra.js b/code/th_15_extra.js index e5fd4ff..92e749f 100644 --- a/code/th_15_extra.js +++ b/code/th_15_extra.js @@ -490,19 +490,19 @@ FloatBallAppWM.prototype.isToolAppRoute = function(route) { FloatBallAppWM.prototype.getToolAppTitle = function(route) { var r = String(route || "settings"); - if (r === "settings") return "ToolHub 设置"; - if (r === "settings_group") return this.getSettingsGroupTitle ? this.getSettingsGroupTitle(this.state.settingsGroupKey) : "设置分组"; + if (r === "settings") return "ToolHub 岛屿设置"; + if (r === "settings_group") return this.getSettingsGroupTitle ? this.getSettingsGroupTitle(this.state.settingsGroupKey) : "岛屿分区"; if (r === "btn_editor") { if (this.state.editingButtonIndex !== null && this.state.editingButtonIndex !== undefined) { - return (this.state.editingButtonIndex === -1) ? "新增按钮" : "编辑按钮"; + return (this.state.editingButtonIndex === -1) ? "添加工具伙伴" : "整理工具伙伴"; } - return "按钮管理"; + return "工具小屋"; } if (r === "schema_editor") { if (this.state.editingSchemaIndex !== null && this.state.editingSchemaIndex !== undefined) { - return (this.state.editingSchemaIndex === -1) ? "新增布局项" : "编辑布局项"; + return (this.state.editingSchemaIndex === -1) ? "新增蓝图项" : "编辑蓝图项"; } - return "布局管理"; + return "岛屿蓝图"; } return "ToolHub"; }; diff --git a/manifest.json b/manifest.json index 3e6ac02..d565bac 100644 --- a/manifest.json +++ b/manifest.json @@ -14,7 +14,7 @@ "size": 5598 }, "th_04_theme.js": { - "sha256": "8e82b6095f55bbf406f82f7a9c01a77919354a67e38dd6f666676b680a2410a0", + "sha256": "b56b9013de31bf191a786359f1371b07375c3aa60bbb15bdf318dd39945858d7", "size": 38293 }, "th_05_persistence.js": { @@ -54,12 +54,12 @@ "size": 20386 }, "th_14_panels.js": { - "sha256": "d89af917e8a594c5da78fa1e77203da8eddd3f49648e18de320d40b1a5e4a522", - "size": 244218 + "sha256": "1ea35e0167661b5bba0652e672acad45e8cecb09d174763ae6bbcf3f8a8a582e", + "size": 244019 }, "th_15_extra.js": { - "sha256": "a95432faf7a8622b74107ea175154c903061dea362981a96554bb7bf78f8a428", - "size": 90762 + "sha256": "1e5a52de2475980da593d7d6f8bf0bdda6966ba3b9688bb5eb8b4343c8734f3f", + "size": 90780 }, "th_16_entry.js": { "sha256": "e7c99c3dfbd6aedab05551426955081ae6cae034754f2f557cefa01dc75dc001", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260514142843 + "version": 20260514151539 } diff --git a/manifest.sig b/manifest.sig index be68b2b..5ad9fb0 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -j0oTSR5ZVRDOvqR9jOi5IcvH7KDrHCDMRhZCDAivu7fCuudETXv/mwgActNQB8ouzPEeZ74JwVqWYdmaLrDI2tygFHBJX3arxilpzLiXl+d/abJR/Y5/h3eU715JHcoeuQ58ZdH6fm2yHyeUsKqwcYGyuoiQs5kC11xcZSOK5y7O3X/TFRaTjC4WNcZYdHAwVW9Flfw9+40k+LE6HeBBOKUqG00NE1rnjmPGAsZzU9/Gp6UjuNlyOYLQ+Ds7HnLX+SeK2IcK5uOqQqgZuz8YsgayTZ3xp4RQws7tteptZUv+2cUfsFpqfrMp/zqon0SW/oiF/VspV/yS1PfrcgKXqhxNhS/CyPZESmhB4nkinsGeAfz+nvpi9mWmtc2g8ij8S5oPKuSZ1VsD9XVH0J3z6GI9XGmheTgTKxmd45+FICaGRngxk+WR7l1akfPo3olmqaycFTExyswUZpx2Cct6Dj6Na5I92tbJ57rwT8E8P5IOhdHINLDXtBrV5NSFRil7 +YHDfLmzWffqmb4iPzy6Fh7pS0q6Ye2nDTqg+aHukOCghBrzwYHf5CCGHADxmzJYx78aPh1EZzJ1ykxVuN7peD4ipLrzYq7D88/IkVCxtt2pEJEfQuuPX2rUGKpmIeVvoxGMN5aHWdNFmR4W/bfc0f2lVDPWQNkdZz2VkmK49Krv1LZXaWaIAvHqma2NGdIAC/ZTuycQYmT7KRTsh7SdMEKbg8lGHM53ABwtzKgMK73bXXaU3rzv/36wpVilPWND/Xkdo/dmuh3yQkt0NY7WuLSu1ETrnKy75rQHbculPU6gzHFEO7kY5OGiNfceyc1en7F+f5WciyRxGuGSX4kcC6dkc3I/TBmsH47FhEmo2ieF5Lyck5b32Mucjwjv5uIOY7tny3Yw0sc9MFd4r5fIM7nnNTZvroWmuZ9HuIxv/um1ZGVtOS2Wp/D5YT3Ej25B6aGOJaLmSs3/6ECqfhFIwXzBCyUQE7V6fasTrM5yTUx51YrWo80fD+Nf7z4Dlxgvm diff --git a/scripts/verify_button_editor_layout.py b/scripts/verify_button_editor_layout.py index 7acc3e7..7840fab 100644 --- a/scripts/verify_button_editor_layout.py +++ b/scripts/verify_button_editor_layout.py @@ -12,7 +12,7 @@ checks = [ ("manager has search surface marker", "按钮管理搜索卡片" in text), ("manager no false long-press sort text", "长按卡片排序" not in text), ("manager no homepage block text", "按钮管理首页" not in text), - ("manager header count only", "共 \" + buttons.length + \" 个按钮" in text), + ("manager header count only", '共 " + buttons.length + " 个按钮' in text or '共 " + buttons.length + " 个工具伙伴' in text), ("manager list footer uses remaining-height scroll", "避免“取消更改/保存所有”被挤到屏幕外" in text and "scrollLp.weight = 1" in text), ("manager list footer has equal buttons and bottom gap", "btnListCancelLp.weight = 1" in text and "btnListSaveLp.weight = 1" in text and "listBottomLp.setMargins(0, self.dp(6), 0, self.dp(12))" in text), ("editor no useless workbench", "按钮编辑工作台" not in text and "createButtonEditorHeroCard" not in text),