fix: improve ToolApp landscape edge back handling

This commit is contained in:
7015725
2026-05-22 01:34:08 +08:00
parent 66fa86b37d
commit 86dca84a27
4 changed files with 50 additions and 12 deletions

View File

@@ -368,7 +368,7 @@ FloatBallAppWM.prototype.applyPanelPredictiveBackProgress = function(panel, even
if (p > 1) p = 1; if (p > 1) p = 1;
var edge = 0; var edge = 0;
try { edge = Number(event.getSwipeEdge()); } catch (eE) { 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.state.toolAppBackEdge = edge;
this.applyToolAppBackPreviewProgress(edge, p); this.applyToolAppBackPreviewProgress(edge, p);
return; return;
@@ -429,7 +429,7 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) {
var usedAnimation = false; var usedAnimation = false;
function finishBack(reason) { 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; var edge = 0;
try { edge = Number(self.state.toolAppBackEdge || 0); } catch (eEdge) { edge = 0; } try { edge = Number(self.state.toolAppBackEdge || 0); } catch (eEdge) { edge = 0; }
self.finishToolAppBackPreview(edge, true); self.finishToolAppBackPreview(edge, true);

View File

@@ -587,6 +587,25 @@ FloatBallAppWM.prototype.getToolAppPreviousStackEntry = function() {
return null; 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) { FloatBallAppWM.prototype.makeToolAppStackEntry = function(route) {
return { return {
route: String(route || "settings"), route: String(route || "settings"),
@@ -687,9 +706,28 @@ FloatBallAppWM.prototype.prepareToolAppBackPreview = function(edge) {
var root = this.state.toolAppRoot; var root = this.state.toolAppRoot;
var body = this.state.toolAppBody; var body = this.state.toolAppBody;
var prevEntry = this.getToolAppPreviousStackEntry(); 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; if (!root || !body || !prevEntry || !prevEntry.route) return false;
var prevRoute = String(prevEntry.route || "settings"); var prevRoute = isPaneBack ? "settings:pane" : String(prevEntry.route || "settings");
var prevBody = this.buildToolAppPreviewBody(prevEntry); 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; if (!prevBody) return false;
var lp = new android.widget.FrameLayout.LayoutParams(-1, -1); var lp = new android.widget.FrameLayout.LayoutParams(-1, -1);
prevBody.setAlpha(0.88); prevBody.setAlpha(0.88);
@@ -803,7 +841,7 @@ FloatBallAppWM.prototype.createToolAppEdgeBackStrip = function(edge) {
if (action === android.view.MotionEvent.ACTION_DOWN) { if (action === android.view.MotionEvent.ACTION_DOWN) {
downX = event.getRawX(); downX = event.getRawX();
downY = event.getRawY(); downY = event.getRawY();
active = !!(self.state && self.state.toolAppActive && self.getToolAppPreviousStackEntry()); active = !!(self.state && self.state.toolAppActive && self.hasToolAppBackTarget && self.hasToolAppBackTarget());
moved = false; moved = false;
if (active) self.prepareToolAppBackPreview(edge); if (active) self.prepareToolAppBackPreview(edge);
return active; return active;
@@ -875,7 +913,7 @@ FloatBallAppWM.prototype.getToolAppBackEdgeWidthPx = function() {
FloatBallAppWM.prototype.showToolAppScreenBackStrips = function() { FloatBallAppWM.prototype.showToolAppScreenBackStrips = function() {
try { try {
if (!this.state.wm || !this.state.toolAppActive) return false; if (!this.state.wm || !this.state.toolAppActive) return false;
if (!this.getToolAppPreviousStackEntry || !this.getToolAppPreviousStackEntry()) { if (!this.hasToolAppBackTarget || !this.hasToolAppBackTarget()) {
this.hideToolAppScreenBackStrips(); this.hideToolAppScreenBackStrips();
return false; return false;
} }

View File

@@ -34,8 +34,8 @@
"size": 7938 "size": 7938
}, },
"th_09_animation.js": { "th_09_animation.js": {
"sha256": "2a991cbf4bf38bfb3d1dda876c0c86778e5dbbe75d6eb268a068e3f200ce0c13", "sha256": "56c53d9b8ba4bb9547dd4c939555a10ab1911220ac7b2188db87ec6f4203c326",
"size": 40229 "size": 40197
}, },
"th_10_shell.js": { "th_10_shell.js": {
"sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc", "sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc",
@@ -58,8 +58,8 @@
"size": 290242 "size": 290242
}, },
"th_15_extra.js": { "th_15_extra.js": {
"sha256": "a78f59de13c283c9b796e2be3c80d7303e82805cd438a82ba6697c964aa01b7a", "sha256": "59dfd82376d4515515b0596f3cf87d28f24655571d9502cd0b57913363741729",
"size": 102533 "size": 104045
}, },
"th_16_entry.js": { "th_16_entry.js": {
"sha256": "6c59d9891cd010647f84c3db93f1cf95c7bbfb758470ea21044bf72eb8ff73d1", "sha256": "6c59d9891cd010647f84c3db93f1cf95c7bbfb758470ea21044bf72eb8ff73d1",
@@ -68,5 +68,5 @@
}, },
"keyId": "toolhub-targets-2026-rsa3072", "keyId": "toolhub-targets-2026-rsa3072",
"schema": 2, "schema": 2,
"version": 20260521171952 "version": 20260521173354
} }

View File

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