fix: register ToolApp animated back callback

This commit is contained in:
7015725
2026-05-14 03:22:14 +08:00
parent a8cd7c193d
commit f1e2ab7c37
3 changed files with 21 additions and 7 deletions

View File

@@ -425,8 +425,12 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) {
var usedAnimation = false; var usedAnimation = false;
if (android.os.Build.VERSION.SDK_INT >= 34) { if (android.os.Build.VERSION.SDK_INT >= 34) {
try { try {
// 关键:不要只把 Class.forName() 的 Class 对象传给 JavaAdapter。
// 在部分 ColorOS/Rhino 组合里这样会被系统识别成普通 OnBackInvokedCallbacklog 里表现为 mIsAnimationCallback=false。
// 先 forName 预热,再用 Packages.android.window.OnBackAnimationCallback 这个接口对象创建代理,确保 instanceof 命中。
var animCls = java.lang.Class.forName("android.window.OnBackAnimationCallback"); var animCls = java.lang.Class.forName("android.window.OnBackAnimationCallback");
cb = new JavaAdapter(animCls, { var animIface = Packages.android.window.OnBackAnimationCallback;
cb = new JavaAdapter(animIface, {
onBackStarted: function(event) { self.applyPanelPredictiveBackProgress(panel, event); }, onBackStarted: function(event) { self.applyPanelPredictiveBackProgress(panel, event); },
onBackProgressed: function(event) { self.applyPanelPredictiveBackProgress(panel, event); }, onBackProgressed: function(event) { self.applyPanelPredictiveBackProgress(panel, event); },
onBackCancelled: function() { self.resetPanelPredictiveBackVisual(panel); }, onBackCancelled: function() { self.resetPanelPredictiveBackVisual(panel); },
@@ -441,8 +445,12 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) {
self.handlePanelBack(which, "predictive_back"); self.handlePanelBack(which, "predictive_back");
} }
}); });
usedAnimation = true; usedAnimation = !!animCls.isInstance(cb);
if (!usedAnimation) {
safeLog(self.L, 'w', "OnBackAnimationCallback proxy not instance; fallback may show mIsAnimationCallback=false");
}
} catch (eAnim) { } catch (eAnim) {
safeLog(self.L, 'w', "create OnBackAnimationCallback fail: " + String(eAnim));
cb = null; cb = null;
} }
} }
@@ -459,7 +467,13 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) {
if (!cb) return false; if (!cb) return false;
var priority = 0; var priority = 0;
try { priority = android.window.OnBackInvokedDispatcher.PRIORITY_DEFAULT; } catch (ePri) { 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;
}
} catch (ePri) { priority = 0; }
dispatcher.registerOnBackInvokedCallback(priority, cb); dispatcher.registerOnBackInvokedCallback(priority, cb);
if (!this.state.panelBackCallbackEntries) this.state.panelBackCallbackEntries = []; if (!this.state.panelBackCallbackEntries) this.state.panelBackCallbackEntries = [];
this.state.panelBackCallbackEntries.push({ view: panel, dispatcher: dispatcher, callback: cb, which: String(which || ""), animation: usedAnimation }); this.state.panelBackCallbackEntries.push({ view: panel, dispatcher: dispatcher, callback: cb, which: String(which || ""), animation: usedAnimation });

View File

@@ -34,8 +34,8 @@
"size": 7938 "size": 7938
}, },
"th_09_animation.js": { "th_09_animation.js": {
"sha256": "5f5e8743438af92238c377d864a8ab54ba0f5c1fb9198e4003f2530ee1fb4bf5", "sha256": "aeaae4c69212000c549d3a5835b4e13efc2665c08b98c76835ead092bab6afc3",
"size": 36684 "size": 37646
}, },
"th_10_shell.js": { "th_10_shell.js": {
"sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc", "sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc",
@@ -68,5 +68,5 @@
}, },
"keyId": "toolhub-targets-2026-rsa3072", "keyId": "toolhub-targets-2026-rsa3072",
"schema": 2, "schema": 2,
"version": 20260513191013 "version": 20260513192204
} }

View File

@@ -1 +1 @@
MDFkuupKMa3WOF6k4FEjEUDpEgxCnwNtCPOyqgB62IWvxKNGLcru5te81MGFNGIyfOKd/eq7CJQ+g18iXdOx618qeMKI6cHpUTVPSOOeLsvRijlJp7/mWip5OG2OPOUziiaMNafBLddQRrRHn0siNoWG5hte3SYfUcVLw8SpJTAwjJCoX56MB6E2tkdkv2Beg+76my7LBd0IK5bAms/cj5v5wDGxnj58iJxIgt5JjpW0TZp3OzMLBjmk4uvUm2rqVeoEIoHwrFN87P9TNZ2K8YoR6DskyRhZAvwZd3RCN92UKK7xu8XqY0YeSYFHdcZe8ntMfvt/vDOe5RMWD1VbU0F6l960aYhZx1wH3eU+nQ/zy920ryRjH/S904q9ZLC+S4QDX4u3xKRTUjQVKh9TBE5ZwnAI3PKDt7W1y/tiOE9X5j8cLtvzSySkvrG1SY+pbfKTdonlVAV6QXOSYZRsJp7Gr8MSVQOhJwVz4HoByOI2EiQSbLwxLexuFUJhIKvN ncqYbwM/RAG7BkNXDAmWjUnEsO+Fy4SyYu4LOvH9FgU6kQ2xojzYoKXLL1dmRs7xKCXEfiECFl+qI4+w6X4KETfC3O+N+X8UuhYKgi96WtLp70//7LzU75t8EQx/StPPckzsVD3UluoAdJ4Dv3PYdNSWN39HdQQaqDqT0+3VByRKITCxwmNfcE/oTXA15vIZ+UU01r6zZSTCgIiqofCpsM8PHz0/laQvpNiFxqGRgmFWZUUU1q/U+QFg1lUpu5yU9uESslwW6PiVSIWjqcWPqGVhfIvKgRo/11caKhuKERG78IzT0F/WSXLrmkndh1ItRH7789QLziyMrCQARUlzHkS0qEAChjb+v4Lb7k15dDtkyI7vAwEAykJNY6+WwZ2Xxb77+9ncwNHm2qxubjo6hUZc+CwHbk2JOgKLQSNv/mvUuKfa7pd7rZ+oKtBIEY56OIfYEHMaMt+ZDnU8WcYcuhlZyv3dnUPV28pPwzmlfQcq3TDiSYACZnP3ssa+ESaw