fix: make ToolHub UI actions responsive
This commit is contained in:
@@ -281,21 +281,30 @@ FloatBallAppWM.prototype.ui = {
|
||||
var pasteBtn = this.createFlatButton(app, "粘贴", this.colors.accent, function() {
|
||||
try {
|
||||
var cb = context.getSystemService(android.content.Context.CLIPBOARD_SERVICE);
|
||||
if (cb.hasPrimaryClip()) {
|
||||
var item = cb.getPrimaryClip().getItemAt(0);
|
||||
if (item) {
|
||||
var txt = item.getText();
|
||||
if (txt) {
|
||||
var st = String(txt);
|
||||
var old = String(et.getText());
|
||||
if (old.length > 0) et.setText(old + st);
|
||||
else et.setText(st);
|
||||
et.setSelection(et.getText().length());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!cb || !cb.hasPrimaryClip()) {
|
||||
app.toast("剪贴板为空");
|
||||
return;
|
||||
}
|
||||
var clip = cb.getPrimaryClip();
|
||||
if (!clip || clip.getItemCount() <= 0) {
|
||||
app.toast("剪贴板为空");
|
||||
return;
|
||||
}
|
||||
var item = clip.getItemAt(0);
|
||||
if (!item) {
|
||||
app.toast("剪贴板为空");
|
||||
return;
|
||||
}
|
||||
var txt = item.getText();
|
||||
if (txt === null || txt === undefined || String(txt).length === 0) {
|
||||
app.toast("剪贴板不是文本内容");
|
||||
return;
|
||||
}
|
||||
var st = String(txt);
|
||||
var old = String(et.getText());
|
||||
if (old.length > 0) et.setText(old + st);
|
||||
else et.setText(st);
|
||||
et.setSelection(et.getText().length());
|
||||
} catch (eP) {
|
||||
app.toast("粘贴失败: " + eP);
|
||||
}
|
||||
|
||||
@@ -1577,12 +1577,13 @@ FloatBallAppWM.prototype.showIconPicker = function(opts) {
|
||||
if (e.getAction() === android.view.MotionEvent.ACTION_DOWN) {
|
||||
try {
|
||||
var rect = new android.graphics.Rect();
|
||||
if (state.root) {
|
||||
state.root.getGlobalVisibleRect(rect);
|
||||
if (panel) {
|
||||
panel.getGlobalVisibleRect(rect);
|
||||
var x = e.getRawX();
|
||||
var y = e.getRawY();
|
||||
if (!rect.contains(x, y)) {
|
||||
hide();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch(eOut) { safeLog(null, 'e', "catch " + String(eOut)); }
|
||||
|
||||
@@ -3453,8 +3453,14 @@ scRefreshTv.setOnClickListener(new android.view.View.OnClickListener({
|
||||
try { __scIconCache = {}; } catch(eC0) { safeLog(null, 'e', "catch " + String(eC0)); }
|
||||
try { __scIconKeys = []; } catch(eC1) { safeLog(null, 'e', "catch " + String(eC1)); }
|
||||
try { __scIconInFlight = {}; } catch(eC2) { safeLog(null, 'e', "catch " + String(eC2)); }
|
||||
// 若当前已展开,立即触发重新加载与渲染
|
||||
if (scInlineState.expanded) __scEnsureLoadedAndRender();
|
||||
// 点击刷新时给用户即时反馈;折叠状态下自动展开并加载,避免看起来无效。
|
||||
if (!scInlineState.expanded) {
|
||||
scInlineState.expanded = true;
|
||||
try { scBody.setVisibility(android.view.View.VISIBLE); } catch(eV) { safeLog(null, 'e', "catch " + String(eV)); }
|
||||
try { scArrowTv.setText("▲"); } catch(eA) { safeLog(null, 'e', "catch " + String(eA)); }
|
||||
}
|
||||
__scEnsureLoadedAndRender();
|
||||
try { self.toast("正在刷新快捷方式"); } catch(eToast) {}
|
||||
} catch(eR) { safeLog(null, 'e', "catch " + String(eR)); }
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -653,7 +653,7 @@ FloatBallAppWM.prototype.buildToolAppPreviewBody = function(entry) {
|
||||
var btnBack = this.ui.createFlatButton(this, "‹", T.brown, function() {});
|
||||
btnBack.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 24);
|
||||
btnBack.setPadding(this.dp(8), 0, this.dp(8), 0);
|
||||
try { btnBack.setClickable(false); } catch(eBackClick) {}
|
||||
try { btnBack.setClickable(false); btnBack.setAlpha(0.45); } catch(eBackClick) {}
|
||||
try { btnBack.setBackground(this.ui.createStrokeDrawable(T.primarySoft, this.withAlpha(T.primaryDeep, isDark ? 0.30 : 0.22), this.dp(1), this.dp(18))); } catch(eBackBg) {}
|
||||
bar.addView(btnBack, new android.widget.LinearLayout.LayoutParams(this.dp(42), this.dp(38)));
|
||||
|
||||
@@ -674,7 +674,7 @@ FloatBallAppWM.prototype.buildToolAppPreviewBody = function(entry) {
|
||||
btnClose.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, r === "settings" ? 12 : 18);
|
||||
btnClose.setTypeface(null, android.graphics.Typeface.BOLD);
|
||||
btnClose.setPadding(this.dp(10), 0, this.dp(10), 0);
|
||||
try { btnClose.setClickable(false); } catch(eRightClick) {}
|
||||
try { btnClose.setClickable(false); btnClose.setAlpha(0.45); } catch(eRightClick) {}
|
||||
try { btnClose.setBackground(this.ui.createStrokeDrawable(T.primarySoft, this.withAlpha(T.primaryDeep, isDark ? 0.30 : 0.22), this.dp(1), this.dp(18))); } catch(eRightBg) {}
|
||||
bar.addView(btnClose, new android.widget.LinearLayout.LayoutParams(this.dp(104), this.dp(38)));
|
||||
var barLp = new android.widget.LinearLayout.LayoutParams(-1, topBarHeight);
|
||||
@@ -1143,11 +1143,14 @@ FloatBallAppWM.prototype.updateToolAppShellChrome = function(title, canBack) {
|
||||
var r = String(this.state.toolAppRoute || "");
|
||||
var titleText = String(title || "ToolHub");
|
||||
if (r === "settings") titleText = "❧ 岛屿设置 ❧";
|
||||
var hasBack = false;
|
||||
try { hasBack = !!(this.hasToolAppBackTarget && this.hasToolAppBackTarget()); } catch(eHasBack) { hasBack = !!canBack; }
|
||||
if (this.state.toolAppTitleView) this.state.toolAppTitleView.setText(titleText);
|
||||
if (this.state.toolAppBackButton) {
|
||||
this.state.toolAppBackButton.setText("‹");
|
||||
this.state.toolAppBackButton.setText(hasBack ? "‹" : "✕");
|
||||
this.state.toolAppBackButton.setVisibility(android.view.View.VISIBLE);
|
||||
this.state.toolAppBackButton.setEnabled(true);
|
||||
try { this.state.toolAppBackButton.setAlpha(1.0); } catch(eAlpha) {}
|
||||
}
|
||||
if (this.state.toolAppRightButton) {
|
||||
if (r === "settings") this.state.toolAppRightButton.setText("📖 岛务手册");
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
"size": 5598
|
||||
},
|
||||
"th_04_theme.js": {
|
||||
"sha256": "b839d36cfdf9ed66cb207673119ec4f4567f4afca93a9ca8ca0a52fd01e1ded6",
|
||||
"size": 41840
|
||||
"sha256": "dbfce3c493438843dc7285765f61007b24df5db972b8877a81c4b86ae7b9f7ec",
|
||||
"size": 42168
|
||||
},
|
||||
"th_05_persistence.js": {
|
||||
"sha256": "8cc52d3dacc8ac3c1b5aecf6fc399a2fe516402955799eddbd07dc9195c10d40",
|
||||
@@ -26,8 +26,8 @@
|
||||
"size": 22909
|
||||
},
|
||||
"th_07_shortcut.js": {
|
||||
"sha256": "7b2dbd1e35c636cca4ccce335dfb9e0b972342972ce012116ff4bbcfc438caa1",
|
||||
"size": 72992
|
||||
"sha256": "8e70adda0d73930e2afc1eba488e95016fc2f739ba199834a30bec015fa6156c",
|
||||
"size": 73011
|
||||
},
|
||||
"th_08_content.js": {
|
||||
"sha256": "8a76f15dfd1292081cba4b2dd218424be66540350e2807065421a6176a86c2db",
|
||||
@@ -54,12 +54,12 @@
|
||||
"size": 21198
|
||||
},
|
||||
"th_14_panels.js": {
|
||||
"sha256": "7f67c1a1d0fbffb125837269f8475226e00b79017f5503c406c9f06d37f1ddea",
|
||||
"size": 294524
|
||||
"sha256": "ad0db8e379445b83fd3c86d335b12f084498e1dd876550039a25a9c9d7e12803",
|
||||
"size": 294962
|
||||
},
|
||||
"th_15_extra.js": {
|
||||
"sha256": "11a9866ba156c2a7862633530eb0d796a9955698a0c3fad4199dcccd4bb27c47",
|
||||
"size": 104307
|
||||
"sha256": "f607f0a5e66a7e9a5ef0c2af8eeda78200138c08438bd6a315d1dc7235e55dc7",
|
||||
"size": 104599
|
||||
},
|
||||
"th_16_entry.js": {
|
||||
"sha256": "6c59d9891cd010647f84c3db93f1cf95c7bbfb758470ea21044bf72eb8ff73d1",
|
||||
@@ -68,5 +68,5 @@
|
||||
},
|
||||
"keyId": "toolhub-targets-2026-rsa3072",
|
||||
"schema": 2,
|
||||
"version": 20260521201044
|
||||
"version": 20260521202619
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
QBhY334RgIq6jCCuUNhhW9Uc+Fth5elIZGxYlfkuggQarZnoII1Hxrlsl0P3kUZHSy1iR7RxCTlp+VJ8ELHEpDnWKHOoObN3n36Nxw8cEHY9cNwNAJq9aAETz2R5Tnt7i6Pfi6/GelqOh9RZXNLTcFhywtxqfCaERMQ3mKSeDg71sb0SFGWHUKBgTnTY1mvz/BYfJNsu3gaO1lR5LX4bg3H9kUngqIoXp5EdAo4zhn7XQvuHK/OLKUktfIW+vlFrBlTDfMsfYHX1ajjAdrRYN6z6bumH7agGitRsmKATB/bTtFS4fcatrZrwJUdz7ZQVXM0X4AQP7B//4jHXPcRtg8EkhkqZVxgAw95turMFncg/q8crRtVz1jdtBvMbDYVAu46uop97Xs++IbYmrdAkfqsSYjbLOjUh1Egcq55qKbFwQjWswsRqbwv9zjY/My/5YGJeJCy7QFAxgedTWdgPqtjDvBAUj4pxvuW7xlKkSBWYCtZbGc2mZ07euxyVIPg3
|
||||
C+0TNFqO1QyV/26OJ39wLL93yh2hYFvWynTRwctmWnpLwF8sDUiTxhija5KG3yvJtvQ8cVe6JFHqbCkx/IFuiXVg8xnsr/L91vSiJYdRQvsH/nSl9yuUMik0v5OyMYebVHwsoM/TysbvsH8SdGnbkWjjWsK1wLJxdKrk5PlbQHz7ZskMOJoQn/LUkt9DhTuapalyBZrTh3UQktG/Xg9rRhZUKafgBLBfb9RD1F8jgebY2MN+I7AkeMMIhUv9Eob/pmw598fI7Pr0MKgDVN4Ge8ZIINhthyjFcFz+owToubauW/iAneGEROeZJ9/874c071tyfuCZhH6TMc7BH26VOmv7bq+Rqr0EsRNhFfxnPmPczIX+92Tgp0ppI+xErBN+/rFtLnPBPbfhTTbDt+Q88gxH0jx95Nx9e4Kz/dh1ffJx1oUxGcI78JkyEo68QCIhKgKTmhw7FoQRYoV33Fl+jRxRtBqbMww5oTZd+0u8Wg7FR4iqHDe7o6SlCjnCT7sk
|
||||
|
||||
Reference in New Issue
Block a user