fix: improve ToolApp landscape edge back handling
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user