Skip to content

fix(ime): stuck 'Preparing Dasher' overlay after view recreation — the 'float-like dead window' (#76) - #77

Merged
willwade merged 1 commit into
mainfrom
fix/ime-stuck-loading-overlay
Oct 25, 2026
Merged

willwade merged 1 commit into
mainfrom
fix/ime-stuck-loading-overlay

Conversation

@willwade

Copy link
Copy Markdown
Contributor

Fixes #76.

Heide's v0.1.24 report: "It starts with a big float LIKE window, but you can't type on it. You have to tap on Float first and then Dock."

Root cause — a regression from #74's engine re-entry guard. When onCreateInputView runs again on a LIVE instance (configuration change: rotation, fold, MuMu's freely-resizable window; OEM IME-switch flows that keep the service alive), the recreated view tree builds a fresh loading overlay (visible by default) — but createEngine() returns at the guard BEFORE the line that hides it. The opaque overlay covers the canvas forever: a big, dead, overlay-looking panel. The Float/Dock buttons sit outside the overlay, which is why Float→Dock appeared to revive it.

This also re-explains the whole #73 timeline: "still starts in float mode / fine unless you switch keyboards / doesn't stay docked" were all this dead-canvas state, never the mode preference. The timing matches — v0.1.23 shipped the guard, exactly when her "doesn't stay docked" report arrived.

The fix (single guard-path change, +22/−7)

The engine-guard path now hides the fresh overlay and re-pushes the canvas geometry to the surviving engine. Plus an output-event Log.d breadcrumb (non-empty events only) for support diagnostics.

Repro & verification (API 33 emulator — MuMu's Android generation)

Rotate with the keyboard up → same-instance view recreation:

Measurement Before After
Guard-path restore latency 0.3s (guard hit) 0.07s (guard hit)
Colorful canvas pixels 1 (dead overlay) 500
Pixels changed during a zoom drag 0 106

First-show, IME-switch (fresh instance), and hide/show paths re-verified unaffected.

Testing

  • Emulator repro matrix (above), strict step-by-step with pixel verification
  • :app:assembleDebug green
  • Heide's device: rotate/resize the MuMu window mid-typing — keyboard stays alive
  • Her video (Google Drive, pending) to confirm the visual matches the overlay state

…e real 'float-like dead window' (#76)

Heide on v0.1.24 (MuMu emulator): "It starts with a big float LIKE
window, but you can't type on it. You have to tap on Float first and
then Dock."

Root cause — a regression from #74's engine re-entry guard. When
onCreateInputView runs again on a LIVE instance (configuration change:
rotation, fold, MuMu's freely-resizable window; OEM IME-switch flows
that keep the service alive), the fresh view tree builds a NEW loading
overlay (visible by default), but createEngine() returns at the guard
BEFORE the line that hides it. The opaque overlay then covers the
canvas forever: a big, dead, overlay-looking panel — indistinguishable
from 'float mode' to a user, and untypeable. The Float/Dock buttons sit
OUTSIDE the overlay, which is why tapping Float then Dock appeared to
revive it (each transition forces relayouts and, on some devices, a
process/service restart).

This also re-explains the whole #73 timeline: 'still starts in float
mode / fine unless you switch keyboards / doesn't stay docked' were all
this dead-canvas state, not the mode preference. v0.1.23 shipped the
#74 guard — exactly when her 'doesn't stay docked' report arrived.

Reproduced on the API 33 emulator (MuMu's generation): rotate with the
keyboard up → same-instance recreate → 0.3s guard-path restore (vs 3-4s
full create) → zero colorful canvas pixels. Fix: the guard path now
hides the fresh overlay and re-pushes the canvas geometry to the
surviving engine. Post-fix on the same repro: canvas renders (500
colorful px) and responds to zoom (106 px change during a drag).

Also adds an output-event Log.d breadcrumb (non-empty events only) for
future support diagnostics.

Signed-off-by: will wade <willwade@gmail.com>
@willwade
willwade merged commit 2f9a24e into main Oct 25, 2026
2 checks passed
@willwade
willwade deleted the fix/ime-stuck-loading-overlay branch October 25, 2026 10:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IME: stuck 'Preparing Dasher' overlay after view recreation — the 'big float-like window you can't type on' (Heide, v0.1.24, MuMu)

1 participant