海月玲二

AndroidSKK更新.

今回はだいぶいろいろ変えた.でかいのはフリック入力キーボードの幅とか左右位置を調整できるようにしたことかな.ほかにも,フリック入力の反応を微妙に改善したり,ハードウェアキーボードのときはSandSが使えるようになってたり,ちょっとした使い勝手がいろいろと向上している.

あ,ひとつ前に書いた,1.6でソフトウェアキーボードが出ない問題もちゃんと解決した.別に誰も得しないと思うけど.

しかしまあ,androidのIMEを作る方法についてはいまいち情報が少なくて,どうもよくわからんことが多い.StackOverflowでさえも回答がつかなくて放置されてる例がときどきある始末だ.

今回,EditText(というかEditable)で保持しているシフト状態をIME側から取得しようとあれこれ調べてみたけど,結局やりかたがわからなかった.これができれば,自前でメタキーの管理とかそんなにしなくてすむと思うんだけどなあ.なんでgetEditable()はInputConnectionインターフェースのメソッドに入ってないんだ?

あとKeyboardの高さは強引に変更する方法が見つかったのに,同じようにやっても幅はどういうわけか変更できない,というか変更するとうまく反応しなくなる.Keyboard#computeNearestNeighbors()を呼ばないとちゃんとサイズの変更に追随しないようなのだが,これがなぜかprivateなのである.というかなんで高さの場合はうまくいくのかもよくわからない.しょうがないので,今回は横幅の全パターンに対してレイアウトファイルを用意するという強引な解決をしてある.

IMEを作ってる人達はどこから情報を得てるんだろう? ひょっとして俺が阿呆なだけ?

FetchWebはどうも俺以外にも使ってくれてる人がいるようなので,真面目に改修してみた.

  • 内部処理を修正して高速化した

実は今までのバージョンはかなりてきとうに書いてあったので,そうとう効率の悪い処理をしている部分があった.特にリンクを変換するのが妙に遅い場合があったのだが,それが体感できるほど改善されている.けっこう変わってるので,もし文字化けとか起こすようだったら教えてもらえるとうれしい感じ.

  • 最後にちゃんとエラーメッセージを表示する画面を作った

今までは何か変でもしれっと「完了」とか出ててダウンロードできてない場合がけっこうあったけど,かなり減ったと思う.あと,複数URLをダウンロードする場合も,エラーは最後にまとめて表示するので,いちいち一回一回止まらなくなった.地味に便利.

・タイムスタンプを見るモードをつけた

このモードをオンにすると(デフォルトはオフ),既にダウンロードしたファイルがあり,なおかつサーバー上のファイルが更新されてないなら,ダウンロードしないようになる.ただし,画像とかに関してだけで,htmlとcssは必ずダウンロードされる.これは仕様だ.

あとおまけで,URLをテキストファイルから読みこむ場合,#で始まる行はコメントとして読みとばすようになった.

いやあ,やっと多少マシになったかな.正直,俺しか使わないだろうと思ってたので,なんとも雑なプログラムだったんだよね.もしソースを見てみた酔狂な人がいたら知ってると思うけど.

2014-07-29(火)

無題

正直,サーバーがよこしてくるhtmlやcssの文字コードって,確実に判定するのはわりとめんどくさいよね.ヘッダーが必ずアテにできるとかなら助かるんだけど.

FetchWebはhtmlやcssもテキストとして扱わずバイト列として読んでいて,バイト配列に格納している.で,リンクを処理するとき,実は今までは頭から1バイトずつ調べてタグを探したり置換したりしていた.もちろんすげえ遅かったので,今回ISO-8859-1としてbyte []をStringに変換し,正規表現で一気に検索と置換をするように変えてみたのである.ISO-8859-1として変換するかぎりは,byte []→StringでもString→byte []でも情報は欠落しない,はず.たぶん.

あと問題なのは,ASCII文字がそのままにならない文字コードである.その場合ISO-8859-1としてStringにすると,たぶん正常にタグが見つからなくなるよね.具体的に言うとメジャーなのはUTF-16だろう.

つまり,問題は,「UTF-16でhtmlやcssを書いて公開してる奴がどのくらいいるのか」ということなわけだが,実際どうなんだろ.けっこう多いんだったら,やっぱり真面目に文字コードを判定したほうがいいのかもしれん.うーんめんどくさい.

というか,UTF-16で書かれてたら今までのバージョンでもリンクの取得には失敗してただろうけど.