表題の通りです。昨日勉強会にいってきました。
https://mandroidfcr.doorkeeper.jp/events/33925
みんなでAndroidFrameworkをもくもくと読んで最後に何やったか報告しようーみたいな感じでした。
https://mandroidfcr.doorkeeper.jp/events/33925
みんなでAndroidFrameworkをもくもくと読んで最後に何やったか報告しようーみたいな感じでした。
自分のテーマ
なんでActivity.onKeyDown/UpにDPAD_CENTER来ないんじゃワレ問題
(ちょうどその日の業務でドハマリしたので。本当はRecyclerViewとか見たかったんだけどなー)
内容
Activityを読んで見る。http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/app/Activity.java#2714
onKeyDown/Upに関してはその前にdispatchKeyEvent()を経由してくるので、そこを読む。
decorViewって何
http://stackoverflow.com/questions/23276847/what-is-an-android-decorview”The DecorView is the view that actually holds the window’s background drawable.”
要するに大元の、Window全体のViewってことか?
http://stackoverflow.com/questions/23276847/what-is-an-android-decorview”The DecorView is the view that actually holds the window’s background drawable.”
要するに大元の、Window全体のViewってことか?
2730 return event.dispatch(this, decor != null 2731 ? decor.getKeyDispatcherState() : null, this); 2732 }
return がevent.dispatch()なのでKeyEvent.dispatch()を読んでみる
public final boolean dispatch(Callback receiver, DispatcherState state, Object target) {
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/view/KeyEvent.java#2633ここでActionごとにCallbackとして設定しているActivity.thisのonKeyDownとかUpとかを呼び出している
ちなみにonKeyDownでActivity.onKeyDownの戻り値をtrueにするとstate.startTrackingにする。downのときにtrueにするとstaticクラスのstateのtrackingに登録されるっぽい。
→今trackingしているものは何かを取得すると一意で返ってくるのはそのせい。
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/view/KeyEvent.java#2633ここでActionごとにCallbackとして設定しているActivity.thisのonKeyDownとかUpとかを呼び出している
ちなみにonKeyDownでActivity.onKeyDownの戻り値をtrueにするとstate.startTrackingにする。downのときにtrueにするとstaticクラスのstateのtrackingに登録されるっぽい。
→今trackingしているものは何かを取得すると一意で返ってくるのはそのせい。
とりあえずActivityのonKeyDownを見ようかな…と思ったけどDPAD_CENTERが名指しで使われている箇所をあたってみようかな、と思ってみる。
DPAD_CENTERが呼ばれている箇所を見てみる。
これが意外と少なくてよかった。
Activityの方にあるのはコメントアウトされているしStartActivitiyForResult関係っぽいから違いそう。なのでとりあえず無視。
そしてView.onKeyDown/onKeyUpになんかいろいろコメント書いてある かなりそれっぽいけどコードにはいない→なんか怪しいKeyEvent.isFonfirmKey()ってメソッドいる
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/view/KeyEvent.java#1753KeyEvent.isConfirmKey()でDPAD_CENTERまたはENTERの場合にtrueで返している!!
つまりはDPAD_CENTERまたはENTERのときにごにょごにょごにょとしているわけだ。
http://tools.oesf.biz/android-6.0.0_r1.0/xref/frameworks/base/core/java/android/view/KeyEvent.java#1753KeyEvent.isConfirmKey()でDPAD_CENTERまたはENTERの場合にtrueで返している!!
つまりはDPAD_CENTERまたはENTERのときにごにょごにょごにょとしているわけだ。
多分ここでDPAD_CENTERの処理を行っているから、Activityの方に伝わらなかった…?というところで時間切れ。
まぁ1時間くらいだったから仕方ないね…。
わかんなかったこと
ActivityからViewにどうやっていってるんだろうということ。
(ちょっと今ざっと見てもわからなかったので今後の課題にしたいorz)
感想
rebuild.fmがBGMだったのですが、最初は結構耳に入ってきてちょっと集中できなかった。。
途中から気にならなくなってきたが、更に途中でアニメの話になってうっかりと聞きこんでしまった。
私はシュタゲ見てないし、まど☆マギのTV版のラストはハッピーエンドではないがバッドエンドというほどでもないと思います。叛逆はどう考えても最高にバッドエンド。あの終わり方大好き。
主催の方がメルカリの方らしく、また会場もメルカリだったため、メルカリの会社見学させてもらえた。洒落たオフィスや…なんだこの洒落っぷりは…
みんなが気になるなーと思う場所のコードを読んでいるから、結構見ている箇所が多岐に渡っていて、
へーみんなそういうところが気になるんだーとか、そういうきっかけで調べ始めるのかーとか、そういった別の視点があったなと思った。ホーム画面のPagerとか気にしたことがなかったので、そういった気づきもあった。
なかなかじっくりと、ただFrameworkのコードを読むという時間って取れないので、結構貴重な時間だったと思う。
どうしても会社にいる時間は業務でわたわたしてしまうし、プライベートでコード書くときもがりがりと書いてしまうので、もっと他の人のコード読んだほうがいいのかなーとは思った。
ぜひ、次回もあったら参加したい勉強会でした。