From 86dca84a27a1ccf4c88a55979d294994d598a430 Mon Sep 17 00:00:00 2001 From: 7015725 Date: Fri, 22 May 2026 01:34:08 +0800 Subject: [PATCH] fix: improve ToolApp landscape edge back handling --- code/th_09_animation.js | 4 ++-- code/th_15_extra.js | 46 +++++++++++++++++++++++++++++++++++++---- manifest.json | 10 ++++----- manifest.sig | 2 +- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/code/th_09_animation.js b/code/th_09_animation.js index 640da7e..4686e2d 100644 --- a/code/th_09_animation.js +++ b/code/th_09_animation.js @@ -368,7 +368,7 @@ FloatBallAppWM.prototype.applyPanelPredictiveBackProgress = function(panel, even if (p > 1) p = 1; var edge = 0; try { edge = Number(event.getSwipeEdge()); } catch (eE) { edge = 0; } - if (panel && this.state && this.state.toolAppRoot === panel && this.applyToolAppBackPreviewProgress && this.getToolAppPreviousStackEntry && this.getToolAppPreviousStackEntry()) { + if (panel && this.state && this.state.toolAppRoot === panel && this.applyToolAppBackPreviewProgress && this.hasToolAppBackTarget && this.hasToolAppBackTarget()) { this.state.toolAppBackEdge = edge; this.applyToolAppBackPreviewProgress(edge, p); return; @@ -429,7 +429,7 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) { var usedAnimation = false; function finishBack(reason) { - if (String(which || "") === "tool_app" && self.finishToolAppBackPreview && self.getToolAppPreviousStackEntry && self.getToolAppPreviousStackEntry()) { + if (String(which || "") === "tool_app" && self.finishToolAppBackPreview && self.hasToolAppBackTarget && self.hasToolAppBackTarget()) { var edge = 0; try { edge = Number(self.state.toolAppBackEdge || 0); } catch (eEdge) { edge = 0; } self.finishToolAppBackPreview(edge, true); diff --git a/code/th_15_extra.js b/code/th_15_extra.js index 2c2b280..f761565 100644 --- a/code/th_15_extra.js +++ b/code/th_15_extra.js @@ -587,6 +587,25 @@ FloatBallAppWM.prototype.getToolAppPreviousStackEntry = function() { return null; }; +FloatBallAppWM.prototype.hasToolAppPaneBackTarget = function() { + try { + var r = String(this.state.toolAppRoute || ""); + if (r !== "settings") return false; + if (!this.state.settingsHomeSelectedItemId) return false; + var spec = this.getSettingsResponsiveSpec ? this.getSettingsResponsiveSpec() : (this.getToolAppResponsiveSpec ? this.getToolAppResponsiveSpec() : null); + return !!(spec && spec.useSideBySide); + } catch (e) {} + return false; +}; + +FloatBallAppWM.prototype.hasToolAppBackTarget = function() { + try { + if (this.getToolAppPreviousStackEntry && this.getToolAppPreviousStackEntry()) return true; + if (this.hasToolAppPaneBackTarget && this.hasToolAppPaneBackTarget()) return true; + } catch (e) {} + return false; +}; + FloatBallAppWM.prototype.makeToolAppStackEntry = function(route) { return { route: String(route || "settings"), @@ -687,9 +706,28 @@ FloatBallAppWM.prototype.prepareToolAppBackPreview = function(edge) { var root = this.state.toolAppRoot; var body = this.state.toolAppBody; var prevEntry = this.getToolAppPreviousStackEntry(); + var isPaneBack = false; + if ((!prevEntry || !prevEntry.route) && this.hasToolAppPaneBackTarget && this.hasToolAppPaneBackTarget()) { + prevEntry = this.makeToolAppStackEntry ? this.makeToolAppStackEntry("settings") : { route: "settings", settingsGroupKey: "" }; + isPaneBack = true; + } if (!root || !body || !prevEntry || !prevEntry.route) return false; - var prevRoute = String(prevEntry.route || "settings"); - var prevBody = this.buildToolAppPreviewBody(prevEntry); + var prevRoute = isPaneBack ? "settings:pane" : String(prevEntry.route || "settings"); + var oldPaneItem = null; + var hasOldPaneItem = false; + var prevBody = null; + try { + if (isPaneBack) { + oldPaneItem = this.state.settingsHomeSelectedItemId; + hasOldPaneItem = true; + this.state.settingsHomeSelectedItemId = null; + } + prevBody = this.buildToolAppPreviewBody(prevEntry); + } finally { + if (hasOldPaneItem) { + try { this.state.settingsHomeSelectedItemId = oldPaneItem; } catch(eRestorePane) {} + } + } if (!prevBody) return false; var lp = new android.widget.FrameLayout.LayoutParams(-1, -1); prevBody.setAlpha(0.88); @@ -803,7 +841,7 @@ FloatBallAppWM.prototype.createToolAppEdgeBackStrip = function(edge) { if (action === android.view.MotionEvent.ACTION_DOWN) { downX = event.getRawX(); downY = event.getRawY(); - active = !!(self.state && self.state.toolAppActive && self.getToolAppPreviousStackEntry()); + active = !!(self.state && self.state.toolAppActive && self.hasToolAppBackTarget && self.hasToolAppBackTarget()); moved = false; if (active) self.prepareToolAppBackPreview(edge); return active; @@ -875,7 +913,7 @@ FloatBallAppWM.prototype.getToolAppBackEdgeWidthPx = function() { FloatBallAppWM.prototype.showToolAppScreenBackStrips = function() { try { if (!this.state.wm || !this.state.toolAppActive) return false; - if (!this.getToolAppPreviousStackEntry || !this.getToolAppPreviousStackEntry()) { + if (!this.hasToolAppBackTarget || !this.hasToolAppBackTarget()) { this.hideToolAppScreenBackStrips(); return false; } diff --git a/manifest.json b/manifest.json index f150ab6..c49faaf 100644 --- a/manifest.json +++ b/manifest.json @@ -34,8 +34,8 @@ "size": 7938 }, "th_09_animation.js": { - "sha256": "2a991cbf4bf38bfb3d1dda876c0c86778e5dbbe75d6eb268a068e3f200ce0c13", - "size": 40229 + "sha256": "56c53d9b8ba4bb9547dd4c939555a10ab1911220ac7b2188db87ec6f4203c326", + "size": 40197 }, "th_10_shell.js": { "sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc", @@ -58,8 +58,8 @@ "size": 290242 }, "th_15_extra.js": { - "sha256": "a78f59de13c283c9b796e2be3c80d7303e82805cd438a82ba6697c964aa01b7a", - "size": 102533 + "sha256": "59dfd82376d4515515b0596f3cf87d28f24655571d9502cd0b57913363741729", + "size": 104045 }, "th_16_entry.js": { "sha256": "6c59d9891cd010647f84c3db93f1cf95c7bbfb758470ea21044bf72eb8ff73d1", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260521171952 + "version": 20260521173354 } diff --git a/manifest.sig b/manifest.sig index c8d22fb..671fee3 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -Oi5qaFfuPUyGJheCEN7PQ2M76xQNa49VD7xdrkxeZMPgq5AcpYdZzKFSH/KMn7c5UOFpw0QRZWDqRXjUzAOcBoufHBRFEgfhtz2GUgATG62WmWJo8g8+Y754TGYvgNLc5yh+bpRWgPU8h01yMsMwoiJR/U8MB33b2ZjGivPFS/UybpSnMkwj9c4MoVlPCWjP5K+BzDVJRNWq3gzC9yYLDZIXn+R/skMpR84B6vUANY4LMpIdKTmJ+KPCxPp2VrMPccKXnYAl86XB2Nkn583xsRDMhfHMJrCLXNgp66xN2Vg1Fk50QS8d5DyX2jDzxfwX9af6BxItO2MEjvCRdSKB21eD0nFkESv2dEpxqsa+tPlcvc4vgbPBdOXY3hoPxdjPdAN7HMXy9bXjRnq9OqUaJe0ncFVFD31WdC9s/j3f68Nu1n32Rcjuxe3vHci2eD8pVhWUs7DJdHoh0YTVUt7ou/Vwr7Y8wmfpuiz5CDTfGg+XlIsggJrUjEPL5SlbBo2A +jD282Cje59qA6AFxv37U8SI8QYFYil277JHBo0doz+HFMhNR/6eKAvsXjK/roCAil9qQwjeohiCCZPKwvPJziI9ZyQn8Tp+QFfBLfB3IXI7QnaCedxhpQoHBK5YQ8BanwdUkRodcWAEoG12C1U5g4cUPRP8jdxHdJo1ATgpEOu8XSg4AprFxyDCtbcQVuPllGqEQsSg4FMwPCyOQ5WuPEx02NEvJBTpRne1dYQ5SZg8bRt39syY0YY0AkMqiFM+IX7MEEv0b8ZRoauxz2kYmHek6oVFWbzkq84BY/c6lYRw/gF7dFpRD2nJxFsT/FhjnghY6cLfCTPSEzqAIiATRdRqnb06Ae2Z88Sfcjy0QQnbguCVQt6hZ/qd5ZBZ4X57dL0Isshg5Zj8hivTrzwciHdm6lPQ/R9xn+7ABWSz1NxOO+zrs9J/Loje7tRiz8rTcg/AnzfZd3WRd9qfFHX36QrwnFf8S1XfQjc28Cx8+afnD+l/YAZeepg1uMAlJJxym