From 858b1c5f543f528eef5891f4377c4b78ee582180 Mon Sep 17 00:00:00 2001 From: 7015725 Date: Fri, 22 May 2026 05:29:30 +0800 Subject: [PATCH] fix: debounce panel back callback registration --- code/th_09_animation.js | 13 ++++++++++++- manifest.json | 6 +++--- manifest.sig | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/code/th_09_animation.js b/code/th_09_animation.js index 4686e2d..a648d9e 100644 --- a/code/th_09_animation.js +++ b/code/th_09_animation.js @@ -415,6 +415,17 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) { try { if (!panel) return false; if (android.os.Build.VERSION.SDK_INT < 33) return false; + // attach listener + post fallback may fire almost together; avoid unregister/register churn and duplicate logs. + try { + var nowReg = Date.now(); + var entries0 = this.state.panelBackCallbackEntries || []; + for (var ei0 = 0; ei0 < entries0.length; ei0++) { + var it0 = entries0[ei0]; + if (it0 && it0.view === panel && String(it0.which || "") === String(which || "") && (nowReg - Number(it0.registeredAt || 0)) < 300) { + return true; + } + } + } catch(eRegDebounce) {} this.unregisterPanelPredictiveBack(panel); var dispatcher = null; try { dispatcher = panel.findOnBackInvokedDispatcher(); } catch (eFind) { dispatcher = null; } @@ -483,7 +494,7 @@ FloatBallAppWM.prototype.registerPanelPredictiveBack = function(panel, which) { } catch (ePri) { priority = 0; } dispatcher.registerOnBackInvokedCallback(priority, cb); if (!this.state.panelBackCallbackEntries) this.state.panelBackCallbackEntries = []; - this.state.panelBackCallbackEntries.push({ view: panel, dispatcher: dispatcher, callback: cb, which: String(which || ""), animation: usedAnimation, mode: mode }); + this.state.panelBackCallbackEntries.push({ view: panel, dispatcher: dispatcher, callback: cb, which: String(which || ""), animation: usedAnimation, mode: mode, registeredAt: Date.now() }); safeLog(this.L, 'i', "back callback registered which=" + String(which || "") + " mode=" + mode + " priority=" + String(priority)); return true; } catch (e) { diff --git a/manifest.json b/manifest.json index abb887b..7fa1de2 100644 --- a/manifest.json +++ b/manifest.json @@ -34,8 +34,8 @@ "size": 7938 }, "th_09_animation.js": { - "sha256": "56c53d9b8ba4bb9547dd4c939555a10ab1911220ac7b2188db87ec6f4203c326", - "size": 40197 + "sha256": "79e81066da481c8d3a306483a313771fc1058031244f445edb2a618f23dfdbc3", + "size": 40746 }, "th_10_shell.js": { "sha256": "0ed793079c2f6ba7d29f4c0d411705cb72419f45f572cbe37ed32ac16527a8bc", @@ -68,5 +68,5 @@ }, "keyId": "toolhub-targets-2026-rsa3072", "schema": 2, - "version": 20260521212532 + "version": 20260521212917 } diff --git a/manifest.sig b/manifest.sig index ac87a34..50f7ec1 100644 --- a/manifest.sig +++ b/manifest.sig @@ -1 +1 @@ -XzOOqPWRABdrCv/sRx2arVudQsKv9RaTODpYcc/m6v3xaVU2fZCD4oslWZd5QMDthkf7fxkyyLZIo5CGUD3us872ESeFv31MXg+8DRyhv9jQefJouhVokQbkE8kKCojo6OMD9C10gYAhI6Fjm+VGZnyOsMo8qusM2idP1M4afTnVy9jSexcC3Aev50tWJFNuHe+fQLPXL+Elys4z0i56XOhT3BRS+BaxjL0E8Xy3G1vKrKKIeLrKHZ4GJjcsb0O85c7dt3Hf4x5+NkeLOIOuulG5LybzAHREoraOlzQ8tyuGnNJkZmR34mfBG4L0Eq/xx1sTFpMMEHYCwqiTXbe6dsWSanp9EV2/TVczA4zzjb00xYTpqmRBA3gqXEXgZAKfre0qf72DzVA8VdIxjkZ3n/taPrgcoFuIRxEME94oIHkkghwFa0kKygwfgRa8Nm05LnQUsV4wnmtLwixCeX+0GGPVhxrj5tZC9JATR6ElWfTUlTToLOS2ke9iz7IkkoWj +J+ucJ2iSqsLOHjiSuiZWkgPHIxPW6L69huPNPmVDNKuWqgBacB4NV4TcroZNqg5vbl/4BWCdOjyfPJkQGH/qbhDUMcyRxgPxNC1WgZ5bIbwnjWuiS+g/70OFjWsHKiMzlTZoa+djEOZeLt4HHCHiLe/KNPDFSPEQvJaUHJY6gltW7tqHRtI3IrU5pyPvMmgDGUF1o/HOScUWPuNnGUgJC75SBFj7rplfBOyOcMzMK5U/bOEeSRBcjJmEH1Rm6bNIoPPU049Ugn90rGUYcZTiG8oLdDn5Jc7iOvyPrtEz80IjTiurO5VVTD2O21GUnjPF7Y70LfzYJ/DOapSGGZYGkJcrmrMsarKakbcFy+/wv0j+yEF9MCgfWWAtIX4TEV25O0/UV2J8Ur2uf7yHhTIuZ23qtyNFW+0psEgPjaqCg101mbiZxUzcdvuYYfqQheqp9nMCwUWDH6zqZS4UKWrb+b+RBDlEauIByIAiiWer19/ViDbvu94bI+ADh/iB5JPi