Repository navigation
fix(ime): stuck 'Preparing Dasher' overlay after view recreation — the 'float-like dead window' (#76) - #77
Merged
Conversation
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
onCreateInputViewruns 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) — butcreateEngine()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.dbreadcrumb (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:
First-show, IME-switch (fresh instance), and hide/show paths re-verified unaffected.
Testing
:app:assembleDebuggreen