From dcd3fcb9ee5ad21fb33afa6ceaf9c8e04c4753be Mon Sep 17 00:00:00 2001 From: Hermes Date: Fri, 22 May 2026 06:00:15 +0800 Subject: [PATCH] Fix ToolApp screen edge drag follow --- code/th_15_extra.js | 74 ++++++++++++++++++++++++++++++++++++++++++--- manifest.json | 6 ++-- manifest.sig | 2 +- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/code/th_15_extra.js b/code/th_15_extra.js index 3c2a2f9..59ed97c 100644 --- a/code/th_15_extra.js +++ b/code/th_15_extra.js @@ -562,6 +562,7 @@ FloatBallAppWM.prototype.closeToolApp = function() { FloatBallAppWM.prototype.clearToolAppBackPreview = function(resetCurrent) { try { + try { this.resetToolAppBackWindowFollow(); } catch(eFollowClear) {} var prev = this.state.toolAppBackPreviewView; var root = this.state.toolAppRoot; if (prev && root) { @@ -767,7 +768,62 @@ FloatBallAppWM.prototype.prepareToolAppBackPreview = function(edge) { return false; }; -FloatBallAppWM.prototype.applyToolAppBackPreviewProgress = function(edge, progress) { +FloatBallAppWM.prototype.applyToolAppBackWindowFollow = function(edge, dragPx) { + try { + if (!this.state || !this.state.wm || !this.state.viewerPanel || !this.state.viewerPanelLp) return false; + + var lp = this.state.viewerPanelLp; + var dir = Number(edge) === 1 ? -1 : 1; + + if (this.state.toolAppBackPreviewOriginX === null || this.state.toolAppBackPreviewOriginX === undefined) { + this.state.toolAppBackPreviewOriginX = Number(lp.x || 0); + } + + var raw = Number(dragPx || 0); + if (isNaN(raw)) raw = 0; + if (raw < 0) raw = -raw; + + var maxFollow = this.dp(160); + try { + var w = Number(lp.width || 0); + if (w > 0) maxFollow = Math.min(maxFollow, Math.floor(w * 0.38)); + } catch(eW) {} + + var follow = Math.min(raw, maxFollow); + var nx = Math.round(Number(this.state.toolAppBackPreviewOriginX || 0) + dir * follow); + + if (lp.x !== nx) { + lp.x = nx; + this.state.wm.updateViewLayout(this.state.viewerPanel, lp); + } + + return true; + } catch(e) { + safeLog(this.L, 'w', 'apply tool app window follow fail: ' + String(e)); + } + return false; +}; + +FloatBallAppWM.prototype.resetToolAppBackWindowFollow = function() { + try { + if (!this.state || !this.state.wm || !this.state.viewerPanel || !this.state.viewerPanelLp) return false; + if (this.state.toolAppBackPreviewOriginX === null || this.state.toolAppBackPreviewOriginX === undefined) return false; + + var lp = this.state.viewerPanelLp; + var ox = Number(this.state.toolAppBackPreviewOriginX || 0); + if (lp.x !== ox) { + lp.x = ox; + this.state.wm.updateViewLayout(this.state.viewerPanel, lp); + } + this.state.toolAppBackPreviewOriginX = null; + return true; + } catch(e) { + safeLog(this.L, 'w', 'reset tool app window follow fail: ' + String(e)); + } + return false; +}; + +FloatBallAppWM.prototype.applyToolAppBackPreviewProgress = function(edge, progress, dragPx) { try { var p = Number(progress || 0); if (isNaN(p)) p = 0; @@ -784,8 +840,13 @@ FloatBallAppWM.prototype.applyToolAppBackPreviewProgress = function(edge, progre try { w = Number((this.state.toolAppRoot && this.state.toolAppRoot.getWidth && this.state.toolAppRoot.getWidth()) || 0); } catch (eW1) {} } if (!w || w < this.dp(120)) w = this.dp(320); + try { + if (dragPx !== undefined && dragPx !== null) { + this.applyToolAppBackWindowFollow(edge, dragPx); + } + } catch(eFollow) {} if (body) { - body.setTranslationX(dir * w * eased); + body.setTranslationX(dir * w * eased * 0.42); body.setAlpha(1.0 - 0.10 * eased); var s = 1.0 - 0.015 * eased; body.setScaleX(s); @@ -820,6 +881,7 @@ FloatBallAppWM.prototype.finishToolAppBackPreview = function(edge, complete) { try { if (prev) prev.animate().translationX(0).alpha(1).scaleX(1).scaleY(1).setDuration(180).setInterpolator(decel).start(); } catch(ePrev) {} body.animate().translationX(dir * w).alpha(0.90).scaleX(0.985).scaleY(0.985).setDuration(180).setInterpolator(decel).withEndAction(new java.lang.Runnable({ run: function() { + try { self.resetToolAppBackWindowFollow(); } catch(eResetFollow) {} try { self.clearToolAppBackPreview(true); } catch (eClear) {} try { self.popToolAppPage("edge_swipe_back"); } catch (ePop) {} } @@ -830,12 +892,16 @@ FloatBallAppWM.prototype.finishToolAppBackPreview = function(edge, complete) { var cancelInterp = new android.view.animation.AccelerateDecelerateInterpolator(); try { if (prev) prev.animate().translationX(-dir * self.dp(24)).alpha(0.88).scaleX(0.975).scaleY(0.975).setDuration(200).setInterpolator(cancelInterp).start(); } catch(ePrev2) {} body.animate().translationX(0).alpha(1).scaleX(1).scaleY(1).setDuration(200).setInterpolator(cancelInterp).withEndAction(new java.lang.Runnable({ - run: function() { try { self.clearToolAppBackPreview(true); } catch (eClear2) {} } + run: function() { + try { self.resetToolAppBackWindowFollow(); } catch(eResetFollow2) {} + try { self.clearToolAppBackPreview(true); } catch (eClear2) {} + } })).start(); } else { this.clearToolAppBackPreview(true); } } catch (e) { + try { this.resetToolAppBackWindowFollow(); } catch(eResetFollow3) {} this.clearToolAppBackPreview(true); safeLog(this.L, 'w', "finish tool app back preview fail: " + String(e)); } @@ -875,7 +941,7 @@ FloatBallAppWM.prototype.createToolAppEdgeBackStrip = function(edge) { if (triggerDp > 720) triggerDp = 720; var triggerDistance = self.dp(triggerDp); var p = Math.min(1, Math.abs(mx) / triggerDistance); - self.applyToolAppBackPreviewProgress(edge, p); + self.applyToolAppBackPreviewProgress(edge, p, Math.abs(mx)); } return true; } diff --git a/manifest.json b/manifest.json index fd2b4a7..dada174 100644 --- a/manifest.json +++ b/manifest.json @@ -58,8 +58,8 @@ "size": 304993 }, "th_15_extra.js": { - "sha256": "3b89dc66125a7ced5c4a9db43e4b2098ff0f75c7901783299989fb965bf49092", - "size": 106239 + "sha256": "2cfa025fb31802d45efec86b93515abafdc15b0213b29e449f4c1508a11aeff6", + "size": 108559 }, "th_16_entry.js": { "sha256": "6c59d9891cd010647f84c3db93f1cf95c7bbfb758470ea21044bf72eb8ff73d1", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260521215143 + "version": 20260521215947 } diff --git a/manifest.sig b/manifest.sig index 5e4b322..087fa6d 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -ki6nmRhwoltwi9Sf1YkxhFONhxIWJOFcI8E+ccQBq43IEspPEqloDva7Tf0cjiJnx5Gng2mMAIWY+2hlxqd//W5ck/HAkadwqtH+f444U7UW54RTa/NqJ8xD5CfLmmJCdD4kU8qy9+X41qASGqp4sKrW4aToUDGbYWQi/arznv/D7C660v1j5IQAGMnWrOtGEq5ZukMg4emVSXeb8b6ULeBxScQnp52WP6TzHClaHQIeoa59M2/PTRmcpsWhA6yx6xjieF9oo4C6YTLAha3BnIE8cH4xa/eM1LbqtO/U9+/2qOgGpChW2XmEg9V0LxpQ6tE4wuYlYe2+pqBCk3CZxo0gx0j11vJBA1HAEv3h3fqzXsixoPTl/XCu5LlhqeNN3/7AY6d2h2lHBSSkud0XEVtJ3uznbqr00zoZ7otbf7Ns7kmBTkb9JB5OXdbDPxd0bFZmCBYKUb1vAZTYp7yVR8RpzQwAlkARoJd+d03iYjFeuvPViL8xmshjw2NRtsaR +Q7x3zGDrx6H/5q0xEOY6JPD22CPaCXutvySNnKfIevW3cu+Db7vS5zDKhWm9tmuDkx2PMA4T0I673Tz5TPViqhn003j+5++tpaJQI3cCOFgLjH9QEPswBCglul9ge3vOGEiTJsjIYzqfzLDRWk4S7cdiw4Myzl9apKRzAdvQP7EPM88Dx9fu0xlLo6yZ8UQQ2UaDruxy4O2F7yIxuihNEYPy0QlaFivD/lu9TZxlUoY74w/MYsUrP7TGPHFp9Y84MO8IF/ZUaopqtPRVNCGSGWpzFNsZLE3hIPghg6Bm6YYApML8PDLFu3kEHxH0aUUZMXgbZQBCfFsCbmSQw3fL31seZpWX4QEtWQ8u3T+RlKOpT8HnC3VjoRXoqvvlOFG9yAiXi+b75JUF3geVOX4HHWOeMEOtO58s+f977pA/kRDksO3rzNdGa0ywZ6m3nFEMWrfhwqVyyp0vKlnVtJb+62wWqXsUxhOHWH9+r1dmeibObVtcrKBJlU2wJCez8Pbt