From 63fdfb813e511f92d8d73022dcb514b642968c1e Mon Sep 17 00:00:00 2001 From: 7015725 Date: Tue, 19 May 2026 03:02:52 +0800 Subject: [PATCH] Fix long-press move jitter closing settings --- code/th_01_base.js | 8 ++++++-- code/th_15_extra.js | 14 ++++++++++++++ manifest.json | 10 +++++----- manifest.sig | 2 +- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/code/th_01_base.js b/code/th_01_base.js index cc78faa..14b17db 100644 --- a/code/th_01_base.js +++ b/code/th_01_base.js @@ -97,6 +97,7 @@ var ConfigValidator = { // 交互配置 LONG_PRESS_MS: { type: "int", min: 200, max: 2000, default: 600 }, + LONG_PRESS_TRIGGERED_MOVE_SLOP_DP: { type: "int", min: 8, max: 80, default: 28 }, LONG_PRESS_VIBRATE_MS: { type: "int", min: 10, max: 100, default: 40 }, CLICK_SLOP_DP: { type: "int", min: 2, max: 20, default: 6 }, TOOLAPP_BACK_EDGE_WIDTH_DP: { type: "int", min: 1, max: 120, default: 22 }, @@ -731,6 +732,7 @@ var ConfigManager = { LONG_PRESS_VIBRATE_MS: 18, ENABLE_LONG_PRESS: true, LONG_PRESS_MS: 520, + LONG_PRESS_TRIGGERED_MOVE_SLOP_DP: 28, CLICK_SLOP_DP: 6, TOOLAPP_BACK_EDGE_WIDTH_DP: 22, TOOLAPP_BACK_COMMIT_DISTANCE_DP: 72, @@ -849,6 +851,7 @@ var ConfigManager = { { key: "TOOLAPP_BACK_PROGRESS_DISTANCE_DP", name: "设置页返回动画距离", type: "int", min: 1, max: 720, step: 1 }, { key: "ENABLE_LONG_PRESS", name: "启用长按", type: "bool" }, { key: "LONG_PRESS_MS", name: "长按判定(ms)", type: "int", min: 200, max: 2000, step: 10 }, + { key: "LONG_PRESS_TRIGGERED_MOVE_SLOP_DP", name: "长按后抖动容忍距离", type: "int", min: 8, max: 80, step: 1 }, { key: "LONG_PRESS_HAPTIC_ENABLE", name: "长按震动反馈", type: "bool" }, { key: "LONG_PRESS_VIBRATE_MS", name: "震动时长(ms)", type: "int", min: 1, max: 120, step: 1 }, @@ -883,7 +886,7 @@ var ConfigManager = { var needReset = false; if (s) { var sStr = JSON.stringify(s); - if (sStr.indexOf("ENABLE_SNAP_TO_EDGE") < 0 || sStr.indexOf("ENABLE_ANIMATIONS") < 0 || sStr.indexOf("BALL_IDLE_ALPHA") < 0 || sStr.indexOf("PANEL_POS_GRAVITY") < 0 || sStr.indexOf("single_choice") < 0 || sStr.indexOf("ball_shortx_icon") < 0 || sStr.indexOf("ball_color") < 0 || sStr.indexOf("SETTINGS_THEME") < 0 || sStr.indexOf("BALL_BG_COLOR_HEX") < 0 || sStr.indexOf("BALL_ICON_SIZE_DP") < 0 || sStr.indexOf("TOOLAPP_BACK_EDGE_WIDTH_DP") < 0 || sStr.indexOf("TOOLAPP_BACK_COMMIT_DISTANCE_DP") < 0 || sStr.indexOf("TOOLAPP_BACK_PROGRESS_DISTANCE_DP") < 0) { + if (sStr.indexOf("ENABLE_SNAP_TO_EDGE") < 0 || sStr.indexOf("ENABLE_ANIMATIONS") < 0 || sStr.indexOf("BALL_IDLE_ALPHA") < 0 || sStr.indexOf("PANEL_POS_GRAVITY") < 0 || sStr.indexOf("single_choice") < 0 || sStr.indexOf("ball_shortx_icon") < 0 || sStr.indexOf("ball_color") < 0 || sStr.indexOf("SETTINGS_THEME") < 0 || sStr.indexOf("BALL_BG_COLOR_HEX") < 0 || sStr.indexOf("BALL_ICON_SIZE_DP") < 0 || sStr.indexOf("TOOLAPP_BACK_EDGE_WIDTH_DP") < 0 || sStr.indexOf("TOOLAPP_BACK_COMMIT_DISTANCE_DP") < 0 || sStr.indexOf("TOOLAPP_BACK_PROGRESS_DISTANCE_DP") < 0 || sStr.indexOf("LONG_PRESS_TRIGGERED_MOVE_SLOP_DP") < 0) { needReset = true; } @@ -916,7 +919,8 @@ var ConfigManager = { schemaItemDiffers("BALL_BG_COLOR_HEX", ["name", "type"]) || schemaItemDiffers("TOOLAPP_BACK_EDGE_WIDTH_DP", ["name", "type", "min", "max", "step"]) || schemaItemDiffers("TOOLAPP_BACK_COMMIT_DISTANCE_DP", ["name", "type", "min", "max", "step"]) || - schemaItemDiffers("TOOLAPP_BACK_PROGRESS_DISTANCE_DP", ["name", "type", "min", "max", "step"])) { + schemaItemDiffers("TOOLAPP_BACK_PROGRESS_DISTANCE_DP", ["name", "type", "min", "max", "step"]) || + schemaItemDiffers("LONG_PRESS_TRIGGERED_MOVE_SLOP_DP", ["name", "type", "min", "max", "step"])) { needReset = true; } } diff --git a/code/th_15_extra.js b/code/th_15_extra.js index 25e5a28..7f764e0 100644 --- a/code/th_15_extra.js +++ b/code/th_15_extra.js @@ -2052,6 +2052,20 @@ FloatBallAppWM.prototype.setupTouchListener = function() { var dx = Math.round(curRawX - startRawX); var dy = Math.round(curRawY - startRawY); + var longPressMoveSlopDp = Number(self.config.LONG_PRESS_TRIGGERED_MOVE_SLOP_DP || 28); + if (isNaN(longPressMoveSlopDp)) longPressMoveSlopDp = 28; + if (longPressMoveSlopDp < 8) longPressMoveSlopDp = 8; + if (longPressMoveSlopDp > 80) longPressMoveSlopDp = 80; + var longPressMoveSlop = self.dp(longPressMoveSlopDp); + + if (self.state.longPressTriggered) { + // 长按已经触发设置页后,手指未抬起期间的移动全部消费,避免进入普通拖动逻辑并误关设置页。 + if (Math.abs(dx) <= longPressMoveSlop && Math.abs(dy) <= longPressMoveSlop) { + return true; + } + return true; + } + if (!self.state.dragging) { if (Math.abs(dx) > slop || Math.abs(dy) > slop) { self.state.dragging = true; diff --git a/manifest.json b/manifest.json index 3fa3fa3..63d92e6 100644 --- a/manifest.json +++ b/manifest.json @@ -2,8 +2,8 @@ "alg": "SHA256withRSA", "files": { "th_01_base.js": { - "sha256": "ea06cb734ad4ccdcec06d746771f6e3c71154d1acf02192edd2b9664109a8e31", - "size": 55958 + "sha256": "6b7a51c97f76b797b176c8fcf712dbafb8d33ebab448d0c7574f26568dcd14df", + "size": 56392 }, "th_02_core.js": { "sha256": "15bb9bfbd19a673d442e221b0a00a456ed5f87af2666b9c73b117d6223faeecd", @@ -58,8 +58,8 @@ "size": 262019 }, "th_15_extra.js": { - "sha256": "bf28b503ea5e2f023952016a57a421ecc8f8ff57844f39571f01ca18ebbcdad4", - "size": 97293 + "sha256": "36a7adf784921de6f4c66a772175ec99e61c9f5be8545cc6cb394c0f96601033", + "size": 97990 }, "th_16_entry.js": { "sha256": "e7c99c3dfbd6aedab05551426955081ae6cae034754f2f557cefa01dc75dc001", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260518170217 + "version": 20260518190147 } diff --git a/manifest.sig b/manifest.sig index edfe603..0c58888 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -auvFOg4qSLMH+ut6SdgXK8I8smXZZfdI00iUQbFrf7pWIJz/mCzNBJf4DO4B5jn4Xf/TWyNHx956nGPnW9hYc79hehc217udD1f0xuWgoLynMRMqgwKKAd+pSz6gZ6zHZtkr/VXsjROBpoXJ8Z5ei2NHbxbPhYJssF2OLSoznhWYHOLENgWjul6M8zBrEn63GfyYp04p2kmXr6EeHyvK4qMSUmC9wfjgfBnKFt/LJcUsQaS1ZeZsJ7h95IC1vPymDfhcxulh/wkiOqRwjKyGJhWD1ChfEMH8+A9RowG2DTZv4tetvmr4xlXiL//MJDdW9wSH7u8oIkH+2oKni0XWIP3egMcATE/wkIOEQEgyJZiC/pnxpuYqZzOjHIsud7xyDlCbouFyAbEoZ1h1YZTCFbl93Y4Kn2pXigfa7YJoCtJRskqInGCY8Kpggi10XK1OMU8b9r3h33cBUwQyQpa22q8FqQQEDX4lsGq5oj6kFZJMf1i7DKzKKMwSX+PVTTTc +VZkj5FB7IIEkKImiDaunHarfhGsZ8aXkVOeGHBdwrapSZJ9AZZ/7CMt6qSG3PI4GBHfcp229jIWWOI5T6rCND1piKdLmYAkPNjXW47X0xaB6YMvyXKALuPVvm+mFcAqNXBtOlQNjWPAnimdypVmlnzc1wIkGAPWTJRpDRD2bSvHFbZeFyZp8qhyAu5pR4GisecgEZ5gqTgE+BDo+gs3LjpLphekeg9bZWzKX4p1hsttPM2oC6rMLW4SkPaqVsOWJOxJgOAaoZP9dR2bh4/W97WM1dGqxrdANmofg+wpwA2p7KH9DUxPdJqwIe6adCiLP/jXwb2twLuZvY5AuMWj8Im4c4yAmUrE2RdocHl6NStykcx3b9WlQPHPHBfYHFka47+3qHSYPnB5IyxCGMC1d4XxZ34nhbc7yE9aFarjQC9ky1KtBS2hvM58MzE87GiudEb2DJRNYbebdh0/pocnDSXb1rKy16TQWFBk9r1xS7F/mviDN9vKsL1My47q6kLrd