|
| 1 | +# HarmonyOS keyboard band fact, live, 2026-11-08 |
| 2 | + |
| 3 | +Evidence for #4285 (report the keyboard band in snapshot responses): the |
| 4 | +producer's window-manager probe tracks the real IME through a raise and a |
| 5 | +dismiss, and the measured band immediately feeds the tap guard — a stale ref |
| 6 | +aimed into the keyboard region got refused mid-run. |
| 7 | + |
| 8 | +## Device |
| 9 | + |
| 10 | +- HUAWEI 畅享 90 Plus, model `JDY-AL50`, HarmonyOS 7.0.0.111 (SP10C00E111R4P3), API 26 |
| 11 | +- Serial `77TYD26826028730`, USB |
| 12 | +- Surface: system Settings → search bar (tapped at 540,378), no text typed, |
| 13 | + no data touched. |
| 14 | + |
| 15 | +## Hidden → visible → hidden |
| 16 | + |
| 17 | +Snapshot before the keyboard (device on the Settings page): |
| 18 | + |
| 19 | +```json |
| 20 | +"/keyboard": {"kind": "visibility-only", "visible": false} |
| 21 | +``` |
| 22 | + |
| 23 | +The same window-manager dump the producer reads shows the panel window with a |
| 24 | +zero rect while hidden: |
| 25 | + |
| 26 | +``` |
| 27 | +SCBKeyboardPanel ... [ 0 0 0 0 ] [ 0 0 ] [ 1 1 0 0 ] |
| 28 | +``` |
| 29 | + |
| 30 | +Tap the search bar; the IME rises. The probe now answers a live container and |
| 31 | +the snapshot fact flips to the measured band: |
| 32 | + |
| 33 | +```json |
| 34 | +"/keyboard": {"kind": "visible", "frame": {"x": 0, "y": 0, "width": 1080, "height": 2406}} |
| 35 | +``` |
| 36 | + |
| 37 | +After two Back keys the fact returns to |
| 38 | +`{"kind": "visibility-only", "visible": false}`. |
| 39 | + |
| 40 | +## The guard consumed the band immediately |
| 41 | + |
| 42 | +Mid-run, a ref captured before the keyboard rose was refused by the tap guard |
| 43 | +instead of tapping into the IME strip: |
| 44 | + |
| 45 | +``` |
| 46 | +Error (COMMAND_FAILED): Ref @e20 is behind the visible keyboard and cannot be tapped safely |
| 47 | +``` |
| 48 | + |
| 49 | +This is the failure class the evidence session itself hit earlier in the audit |
| 50 | +(a coordinate tap landed on the keyboard's suggestion strip and a record was |
| 51 | +created with a stray character in its name). With the band reported, the guard |
| 52 | +refuses the tap instead. |
| 53 | + |
| 54 | +## Reproduce |
| 55 | + |
| 56 | +```sh |
| 57 | +node bin/agent-device.mjs open com.huawei.hmos.settings --activity com.huawei.hmos.settings.MainAbility \ |
| 58 | + --platform harmonyos --serial 77TYD26826028730 |
| 59 | +node bin/agent-device.mjs snapshot --json --platform harmonyos --serial 77TYD26826028730 # hidden |
| 60 | +node bin/agent-device.mjs press 540 378 --platform harmonyos --serial 77TYD26826028730 # search bar |
| 61 | +node bin/agent-device.mjs snapshot --json --platform harmonyos --serial 77TYD26826028730 # visible + frame |
| 62 | +node bin/agent-device.mjs back --platform harmonyos --serial 77TYD26826028730 # dismiss |
| 63 | +node bin/agent-device.mjs snapshot --json --platform harmonyos --serial 77TYD26826028730 # hidden again |
| 64 | +``` |
0 commit comments