バグの内容
InputType.TYPE_NULL でも入力メソッドが有効となってしまう。 Enter を押すまで対象アプリケーションに入力がなされない。
五月雨式となってしまい恐縮ですが、 #835 で挙げていた Termux で起きる現象は別の問題であることがわかったため別 Issue として投稿させていただきます。
再現手順
- Termux を起動する
- スミレの QWERTY 英語キーボードを起動する
- キーをタップし文字を入力する
- Termux 上の端末に文字は現れない。 Enter を押して確定して始めて文字が入力される。
期待する動作
キーを押下すると、変換バッファに溜め込まれるのではなく、即時アプリケーションに入力される。
スクリーンショット
"cowsay" と入力し、変換候補一覧には見えるが Termux 側には現れていない状況。 (このとき | キーが無いことにも気がついたためそれのみ AOSP キーボードで入力)
スマートフォン環境
- デバイス: Pixel 7a
- OS: GrapheneOS 16 (2026060601)
- アプリバージョン: 775 (1.7.82-lite-fdroid)
- Termux バージョン: 1002 (0.118.3)
追加のコンテキスト
Termux では、既定で端末の EditorInfo.inputType を InputType.TYPE_NULL に設定しています。これにより、入力メソッドを使用せずキーを押した時に直接文字が入力されることを期待しているようです[1]。
しかし、スミレでは InputType.TYPE_NULL を (メタデータの文字列を検索してパスワード入力であると判定しない限り) 通常のテキスト入力として扱っているようです[2]。
Android ドキュメントでは、 InputType.TYPE_NULL は入力候補を表示したりできる高度な入力が扱えないため入力メソッドは直接入力として動作すべきとあります[3]。
しかし、この解釈にはゆれがあるようで、主にサムスン製のキーボードで直接入力とならないため Termux は [1] にあるように設定で別の値を返すことができるようになっています。
その値は InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS ですが、この値は CLASS 領域が設定されていないため本来無効な値です[4]。またスミレキーボードではこちらの値でも入力メソッドは有効です。
Android ドキュメント通りに解釈すると、 TYPE_NULL では入力メソッドを無効化し、 TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS は無効な値なので TYPE_CLASS_TEXT として扱い入力メソッドを有効化するのが正しそうです。
- https://github.com/termux/termux-app/blob/401bbe5/terminal-view/src/main/java/com/termux/view/TerminalView.java#L306
- https://github.com/KazumaProject/JapaneseKeyboard/blob/d83eab3/app/src/main/java/com/kazumaproject/markdownhelperkeyboard/ime_service/extensions/InputTypeExtension.kt#L17
- https://developer.android.com/reference/android/text/InputType#TYPE_NULL
- https://developer.android.com/reference/android/text/InputType#TYPE_MASK_CLASS
バグの内容
InputType.TYPE_NULLでも入力メソッドが有効となってしまう。 Enter を押すまで対象アプリケーションに入力がなされない。五月雨式となってしまい恐縮ですが、 #835 で挙げていた Termux で起きる現象は別の問題であることがわかったため別 Issue として投稿させていただきます。
再現手順
期待する動作
キーを押下すると、変換バッファに溜め込まれるのではなく、即時アプリケーションに入力される。
スクリーンショット
"cowsay" と入力し、変換候補一覧には見えるが Termux 側には現れていない状況。 (このとき
|キーが無いことにも気がついたためそれのみ AOSP キーボードで入力)スマートフォン環境
追加のコンテキスト
Termux では、既定で端末の
EditorInfo.inputTypeをInputType.TYPE_NULLに設定しています。これにより、入力メソッドを使用せずキーを押した時に直接文字が入力されることを期待しているようです[1]。しかし、スミレでは
InputType.TYPE_NULLを (メタデータの文字列を検索してパスワード入力であると判定しない限り) 通常のテキスト入力として扱っているようです[2]。Android ドキュメントでは、
InputType.TYPE_NULLは入力候補を表示したりできる高度な入力が扱えないため入力メソッドは直接入力として動作すべきとあります[3]。しかし、この解釈にはゆれがあるようで、主にサムスン製のキーボードで直接入力とならないため Termux は [1] にあるように設定で別の値を返すことができるようになっています。
その値は
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONSですが、この値は CLASS 領域が設定されていないため本来無効な値です[4]。またスミレキーボードではこちらの値でも入力メソッドは有効です。Android ドキュメント通りに解釈すると、
TYPE_NULLでは入力メソッドを無効化し、TYPE_TEXT_VARIATION_VISIBLE_PASSWORD | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONSは無効な値なのでTYPE_CLASS_TEXTとして扱い入力メソッドを有効化するのが正しそうです。