Google Pixel 9 Pro / Android 16 (API 36) 向けフリック入力キーボード(IME)。
現在の状態: 設計完了・実装未着手。 仕様は確定しており、実装に着手できる。
| 順番 | ファイル | 内容 |
|---|---|---|
| 1 | docs/設計書.md |
全体設計書。まずこれを通読する |
| 2 | docs/spec/FlickMaps.kt |
フリック割り当ての実装。そのまま :domain に配置する |
| 3 | docs/spec/FlickLayoutTest.kt |
上の仕様を実行可能にしたテスト。そのまま :domain のテストに配置する |
| 参考 | きーぼ/ |
参照UI(Simeji)の実機スクリーンショット。英数フリックの一次資料 |
docs/spec/*.kt は設計書の付録ではなくそのまま動く実装である。
配置先は :domain モジュールの dev.mio.pixelkb.domain.layout パッケージ。
Kotlin 1.9 以降が必要(data object と enum entries を使用)。
設計書 §15「実装ステップ」の 1〜4 は未確定事項に一切依存しないので、そのまま着手できる。
- Gradle マルチモジュール構成、Hilt、
InputMethodServiceの空実装 + マニフェスト宣言 docs/spec/の2ファイルを:domainに配置してテストを通す- キーパッド描画とフリック判定(この時点で「変換なしフリックキーボード」として実機で打てる)
- フリックガイドのオーバーレイ
ステップ3まで到達したら、フリック感度・キー高さ・しきい値を実機で触って詰めること。 数値は設計書 §7.5 に初期値がある。
日本語配列(あ/か/さ…)と英数配列(@/ABC/DEF…)は12キーの位置が1対1で対応する。
英数の下フリックが @=1, ABC=2 … '"&-=0 と電話キーパッド配列に一致することから確認した。
このため入力を「どの文字を打ったか」ではなく 「どのキーをどの方向にフリックしたか」=ストローク列として保持すれば、 同一のストローク列を両レイアウトでデコードするだけで要件が満たせる。
StrokeBuffer ──decode(KanaLayout)──→ "とうきょう" ──かな漢字変換──→ [東京, …]
└─decode(AlnumLayout)─→ "tokyo" ──英単語予測────→ [tokyo, …]
- 日本語入力中 → 英数側を
[英]バッジ付きの副候補として提示 - 英数入力中 → かな側を
[和]バッジ付きの副候補として提示
StrokeBuffer を唯一の真実の情報源にすること。
かな文字列・英数文字列は常にそこから導出する(キャッシュはしてよいが正としない)。
ここを崩すと本機能が成立しない。詳細は設計書 §4。
実装前に設計書の該当節を必ず読むこと。
| 論点 | 節 | 要点 |
|---|---|---|
| Edge-to-Edge 強制 | §11.1 | Android 16 ではオプトアウト不可。最下段がナビバーと重なる。inset を実行時取得すること |
| 16KB ページサイズ | §11.2 | Mozc を NDK で使うなら NDK r27+ と max-page-size=16384 が必須 |
| 紛らわしい文字 | §2.7 | 〜 は U+301C(U+FF5E ではない)、ー は U+30FC。取り違えると辞書が引けない |
| 正規化の方向 | §2.7 | 辞書引き時のみ正規化する。出力パスでは絶対に正規化しない |
| フォントスケール | §11.5 | キーラベルに sp をそのまま使うとレイアウトが壊れる |
| プライバシー | §14 | INTERNET パーミッションを宣言しない。パスワード欄では学習を全停止 |
設計書 §17 に詳細。いずれも後から差し替え可能な設計になっている。
- クロスモード候補の挿入位置 — 3番目固定を暫定採用。動かしてから調整する類
- クロスモード候補の抑制しきい値 — 2ストローク以上かつ辞書前方一致を暫定採用
- Mozc 採用可否 — 実装ステップ9まで判断を遅らせられる
きーぼ/ のスクリーンショットは Simeji の実機キャプチャで、英数フリック仕様の一次資料。
きーぼ/記号/ は1枚のみでこれで確定(グリッド本体が未描画だが追加取得はしない)。
記号インベントリは Simeji のパリティを取らず自前で設計する。理由は設計書 §2.5。