fi01_IS01殿がvolume key用のパッチを公開されました。
key trackingもされており、とても素敵です♪(下に書いてあるaltを先に放しても平気)
ソース用のパッチなので、build出来る方しか今は利用出来ませんが・・・
へぇー(・ω・)と思いながらリストを見ていたまけねこ。
個人的に気になったのはvolume key。
いつも少し不便だし、どうにか出来ないかなと思い、調べ始めました。
もちろん、一番簡単そうだと思ったからです( ̄ー ̄)
しかし・・・・いくらぐぐっても、
ALT+7キーをvolume keyとかに割り当てるとか言う記事がどこにもねーーー(つωT)
どれもこれも
・ **キーに**を割り当てる。(例:ALTとCTRLキーを入れ替える。物理的キーの割り当て変更)
・ 文字の割り当てを変更する。(例:マイナス+SHIFT=アンダーバーにする。キーと文字の割り当て変更)
・ Androidアプリにおけるキー割り当て。(例:CTRL+何か=何かの動作を割り当てる。)
ばかりで、
・altやctrlなどを押しつつ別キーを同時押しすると、volume up/downになる、
という話がぜんぜん出てこないorz
androidx86とか、なんかそういうショートカットキーがあるみたいですが、
それっぽいところを見たり、commit logを調べても、見つからないorz
前述した3つ目が近いのだけど、これだとあくまでアンドロイドアプリ上の動作なので、
常駐させたりとか必要そうな気がする。。。
とりあえずソースを追いかけたり、Webの記事を探してみることにしました。
(cかじったぐらいでc++,java知らないけど orz)
===================================
Keyboard入力がどう伝わるか。
情報は怪しく、超絶ざっくりです。あくまで参考に。
Linuxキーボードドライバ(msm_i2ckbd.c)
↓
/dev/input/event5 (is01rebuild様より)
↓
なんか分からないけどframework/baseの下辺りにある.cppなコード
/dev/input/event5の中身を読んでkeyeventを作る?監視?irq?
↓
keyEvent.java
↓
アプリからキー入力を取る場合はkeyEvent.dispatchとかして、
getKeyCodeとか使って判別する、らしい?
前二つの段階では、単にハードウェア的なキー番号でやりとり。
後ろでは、.kl(key layout)ファイルとかkcm(key character map)ファイルとかを利用して、
KeyEvent.javaとかKeyCharacterMap.cppとかで、
それをソフトウェア的なキーの番号に変換し、入力文字の割り当てをしてるようです。
===================================
ALT+6にvolume downを割り当てる場合、以下のどこかでやればいいみたい。
・ドライバ → buildしたりinsmod?するのが面倒臭い。というかkernelはいじくりたくない・・・
・cppなkeyeventを拾って上に送るところ? →cpp知らない:(
・keyEvent.java辺り
・アプリ → アプリ作れない
排他論的に、keyEvent.javaをいじくることにしましたorz
↓あわわ、これ、framework/baseとframework/policy/baseがまじってる・・・orz
grepとかして場所を確認ください(つω;)
http://pastebin.com/P75kZCgf
2011/7/1修正。PhoneWindowManager.javaの差分忘れてましたOrz
キーコードの入力に対し、人間ならまず「そのキーは何?」と聞くだろう、
そしてプログラム処理もそうするだろう、と判断し、
getKeyCodeの所に、alt+6/7の時は、volumedown/upキーだと答えるように。
systemキーだと思わせるために、isSystemのところを同様に偽装
してみました。
主な修正はこの2点のみなので、keyupやlongpressedの時の判定とか大丈夫かと思いましたが、
HardwareCheckerなるソフトではきちんとkeyup/keydownも判定されているようでした。
あ・・・1点だめだ・・・
・ALT押す → ALT, down
・6押す → volumedown, down
・ALT離す → ALT, up
・6離す → 6, up ←volumedown, upじゃないorz
つまり、volumedownというキーがupされたという情報が出てこない(笑)
けど、実際に操作して音量を上げ下げするのにとりあえずは支障なさそうです。
なんとなく印象として、getKeyCodeを修正するのは邪道ぽく、
本筋はドライバを修正するのが良いような気がします。
今回は、とりあえず動いたからいいや(・ω・)