From c92606246eebc1967839b9e8ef017b029c12b897 Mon Sep 17 00:00:00 2001 From: 7015725 Date: Thu, 14 May 2026 18:33:03 +0800 Subject: [PATCH] fix: register ToolApp back animation after attach --- code/th_09_animation.js | 29 +++++++++++++++++++++-------- manifest.json | 6 +++--- manifest.sig | 2 +- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/code/th_09_animation.js b/code/th_09_animation.js index 7504ec2..972ff81 100644 --- a/code/th_09_animation.js +++ b/code/th_09_animation.js @@ -468,11 +468,9 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) { var priority = 0; try { - if (String(which || "") === "tool_app" && android.window.OnBackInvokedDispatcher.PRIORITY_OVERLAY !== undefined) { - priority = android.window.OnBackInvokedDispatcher.PRIORITY_OVERLAY; - } else { - priority = android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT; - } + // ColorOS overlay 窗口用 PRIORITY_OVERLAY 时可能只触发最终返回,不给 CoreBackPreview 进度。 + // 这里对 ToolApp 也统一用 DEFAULT(0),与已验证规则文件实现一致,优先换取系统预测返回动画回调。 + priority = android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT; } catch (ePri) { priority = 0; } dispatcher.registerOnBackInvokedCallback(priority, cb); if (!this.state.panelBackCallbackEntries) this.state.panelBackCallbackEntries = []; @@ -502,10 +500,25 @@ FloatBallAppWM.prototype.attachPanelSystemKeyHandler = function(panel, which) { return false; } })); - panel.post(new java.lang.Runnable({ run: function() { + var registerAfterAttach = function() { try { panel.requestFocus(); } catch(eFocus) {} - try { self.registerPanelPredictiveBack(panel, which); } catch(eBack) {} - } })); + try { self.registerPanelPredictiveBack(panel, which); } catch(eBack) { + try { safeLog(self.L, 'w', "panel predictive register after attach fail: " + String(eBack)); } catch(eLog) {} + } + }; + try { + panel.addOnAttachStateChangeListener(new android.view.View.OnAttachStateChangeListener({ + onViewAttachedToWindow: function(v) { + try { v.post(new java.lang.Runnable({ run: registerAfterAttach })); } catch(ePost) { registerAfterAttach(); } + }, + onViewDetachedFromWindow: function(v) { + try { self.unregisterPanelPredictiveBack(v); } catch(eUnreg) {} + } + })); + } catch (eAttach) { + safeLog(self.L, 'w', "add attach listener fail: " + String(eAttach)); + } + panel.post(new java.lang.Runnable({ run: registerAfterAttach })); } catch (e) { safeLog(this.L, 'e', "attachPanelSystemKeyHandler fail which=" + String(which || "") + " err=" + String(e)); } diff --git a/manifest.json b/manifest.json index 813344c..163c4fb 100644 --- a/manifest.json +++ b/manifest.json @@ -34,8 +34,8 @@ "size": 7938 }, "th_09_animation.js": { - "sha256": "aeaae4c69212000c549d3a5835b4e13efc2665c08b98c76835ead092bab6afc3", - "size": 37646 + "sha256": "91c7793b4a03ac07f1b275486be4f2c5ed0142bdd13dbb13c107149791a84189", + "size": 38387 }, "th_10_shell.js": { "sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260514102839 + "version": 20260514103247 } diff --git a/manifest.sig b/manifest.sig index 252458b..596f165 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -WxsHH0184CoBLfPkBU3QRHBovKUizXZrKGN77cMNvox5S6icOVppkMK3m2AGuDCnBnkfFJaldBAmCYdjDnVM0Be0wPhpjdeX+N126WzSSm4dUn4XrtwUkNGJO/Uq7W5tf67nMvCnKKWYsVg4Pak63x15LiLXFARDZVqi2uD2R62Xvp1VMmTm/xR0zQcxcnxeK2oLQocf5fls0U90ps8TEIITk9KqqtAW/nQbdGC5PYDFi3/F+SmhiKdHFYmArsWpgfEvNrvqMUuJ6VtK+agLEcsHrLP47tbUoOZclN7cDKyhKcc/6XjTLNCJFnX9xm0dKi6v0rk5YA4bqC0cMXjkgpI7n9oqP/wHCU6dFmCEOClKJBc2r7hLD9rrGozIocP/ivh4aF7CdKvN1xIFaXSHM+XFk3yZ7kTSqCvwL41bZk6gjSmd0Z1frjRg2ydlGVQ0p15D6l5l06HJjKr/EeWGe1tgi69DTSf0vjGonCSHSIuMussijUl1HETHdSiu4KaB +FaKtS+QxUdi5mfcpY1c3/2lFN/9ZYMdXlhIM+Mtvzyz+K4Kp27beml/iGWWvk6q2LxQnOT70DNwZA+GK5viK+5ENen0xW2cmDHw2ETdl/SZ9dPfZraw6yXgzEF+CGsqS02fU0rilIr5lOc9sEOPGA5QDP0CXvV7zzvOWaT0K5rUn7XoTsy4gVFHCPjVN1jCEsM3svFiq9bZdhjHrasqavFtQ0f0NfLCyJA/IRpGhCllOku2klSe/nOE+9fa7EvVsU6vWIxIR/sP667Xxob5GC9hG9mKtefCAtob0PTIquT8Y8pbKWm43FpRW+GXO5UpiUik9OHGjPNO+sYNB/vkukAMJMONvavmh/+DXqpaUqXv9Gm1KrCLh6ChJnjihPZk+Hro76okQW3pJhsblwaC3lj6aYUNeW901/yh8FQxQE3QQRi/S3RB5uskvqe92tbWXUdFrcazuvblplJ/2lnayrcR8ggzoLl+ZkDP1VtX3paNChhmO2NFtj9W7lOhUXvcG