style: soften animal island ToolApp copy

This commit is contained in:
7015725
2026-05-14 23:17:09 +08:00
parent edb26dc593
commit 8907a2d5d8
6 changed files with 56 additions and 59 deletions

View File

@@ -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 {

View File

@@ -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();

View File

@@ -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";
};

View File

@@ -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
}

View File

@@ -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

View File

@@ -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),