海月玲二

AndroidSKK更新.

けっこう長い間,ときどきブラウザとかEBPocketとかが強制終了するので何だろうと思っていた.旅行中いろいろ試していて,「SKKが日本語モードのときだけ,画面をさわると落ちる」という事実に気付き,やっとSKKが原因であると認識できた次第.なんとか修正してみた.

最初はKeyboardViewのタッチイベント処理が何か変なのかと思ったが,そうではなかった.どうも,WebViewにフォーカスがあるときに,空文字列をsetComposingText()するとNPEになるようである.WebViewClassic#setNewText()で落ちているようなのだが,うーん,これは,もしかすると単にWebViewのバグだったりしないか? setComposingText()に空文字列を渡すこと自体はComposingTextをクリアするための普通の方法だと思うし(公式リファレンスにもそう書いてある),実際EditTextとかでは別に何も変なことは起きない.WebViewでちゃんと値をチェックしてないだけのような気がするのだが…….

とりあえずonStartInput()でsetComposingText()を呼ばないようにして回避してみた.その他の場面でsetComposingText()を呼ぶときは入力中のはずで,WebViewで入力中になることはないはずだ.たぶん.でも副作用がないか微妙に心配である.

SKKのテストをしてるときに,TreeNoteで強制終了するバグに気付いたので修正した.

前のバージョンは,「ファイル」->「新規作成」をして,画面を一度も切りかえずに(ファイル選択や設定の画面を出したり,別アプリに切りかえたりせずに)ノードを触ると落ちるはず.新規作成を滅多に使わないので気付かなかった.あと最初から新規画面のときも落ちないし.

要するに,コールバックするActivityの参照をonResume()でセットしていたので,onResume()を通らないパターンだとセットされないままになってNPEで死ぬわけだな.Activityをセットするので,準備の終わったonResume()時点にしとこうと思ったのが逆にミスであった.