入力欄に基づく Enter 判定を修正し、Gboard 比較の網羅テストを追加 - #989
Merged
Merged
Conversation
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.
不具合と原因
入力欄から渡された
EditorInfoと、キーボードのレイアウト・プライバシー・変換のための入力種類分類が混在していたため、Enter の送出が Gboard と異なる場合がありました。inputType=0x264001,imeOptions=0x40000006) ではNO_ENTER_ACTIONがあるのに DONE を送出していました。commitText("\n")と送出方式が異なるケースがありました。起点の
dev(bbdc7414746adeffc815d5158631e415a1167007) を別 APK にビルドして、上記 4 ケースの差を実機で確認しました。判定・表示・送出の変更
EditorEnterPolicyを追加し、空入力での通常 Enter を最新のEditorInfoから決定します。NO_ENTER_ACTIONがなければ標準の GO / SEARCH / SEND / NEXT / DONE / PREVIOUS を送出します。NO_ENTER_ACTIONがある場合は Enter の DOWN/UP を送出します。Gboard の観測で異なっていた SHORT_MESSAGE は直接改行をコミットします。actionLabel/actionIdによるキー送出変更は観測されなかったため、標準アクションと抑制フラグを使用します。入力種類の分類自体は変更しません。変換中の確定、文節処理、変換設定、強制改行、物理キーのショートカットは既存の経路を維持します。TYPE_NULL の明示的な直接入力設定やカスタム直接入力・ショートカットの上書きも維持します。
検証画面と網羅条件
-PenterParityLabを付けた場合だけ有効な独立モジュールenter-parity-labを追加しました。製品 APK には入りません。全 public text variation、数値の variation、電話、日時、TYPE_NULL を含みます。非テキストへの複数行フラグも非標準条件として明示して保持しています。マップだけに検証範囲を限定していません。
Gboard 期待値と回帰テスト
Gboard の画面上の Enter から得た全 6,209 ケースの観測を保存し、うち raw 6,161 行を TSV にして JVM テストで照合します。期待値生成器はプロダクションの判定関数を参照しません。完全な観測、正しい EditorInfo、Gboard の IME ID、単一の送出を検査してから書き出します。
比較器は全宣言ケースを走査し、一致・不一致・未実行・実行不能・EditorInfo 不一致・IME 不一致を区別します。欠測同士、違う IME、二重送出、同じ文字列でも違う送出方式を成功扱いにしません。再接続は raw フィールドの restartInput、入力欄切り替えはフォーカス移動と widget の交換で実行します。
テスト環境と結果
Pixel 6 / Android 17 / ja-JP、Gboard
18.1.3.962075747-release-arm64-v8a。修正版と起点 dev は別 application ID の liteStandardDebug を使用しました。フローティングの Compose で初期値の EditorInfo が取得された 3 件は合格扱いにせず、安定した値の取得を待つよう修正して 16 件すべてを再取得しました。変換の比較でも、入力開始時の取りこぼしで Enter 前の状態が異なる試行を除外し、入力コールバックを確認して再実行しました。変換コードは変更していません。除外ログは採用した期待値・成功件数と分離して保存しています。
実装後レビュー
devとの差分をレビューし、判定条件、表示との整合、二重送出、入力欄切り替え時の状態、変換/文節への影響を確認しました。共通の直接入力処理から強制改行にも新しい判定が入る箇所を修正し、空入力の通常 Enter に限定しました。検証側も、実行中の IME 切り替えで停止すること、終了処理が外部の IME 選択を上書きしないこと、フローティング window の探索、WebView 初期カーソルと古い非同期コールバック、Compose の実 EditorInfo 取得を確認・修正しました。
検証上の制限
詳細な構造・再実行手順・実測ログ・レビュー結果は
docs/enter-editor-parity.md、docs/enter-editor-parity-results.md、tools/enter_parity/results/に保存しています。