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;
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);

View File

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