PermissionsDispatcherにPRをマージしてもらった話

 PermissionsDispatcherにPRをマージしてもらった話

F46a37b9f855c245f72a07b04045216a?s=128

Tomoya Miwa

June 26, 2018
Tweet

Transcript

  1. PermissionsDispatcherにPRをマージしてもらった話し tomoya0x00 shibuya.apk #26

  2. 簡単に⾃⼰紹介 tomoya0x00 Twitter, GitHub, Qiita Android, Embedded system, BLE/BT, iOS

    DeNA Co., Ltd. Automotive Business Unit.
  3. 初めてまともにOSSのPRを書いてマージしてもらった これまでもtypo修正とかはあったんだけど… 皆様がPRを出すきっかけになれば 技術的な話しはほとんどしません

  4. PRのきっかけ

  5. PRのきっかけ KotlinでStateMachineのライブラリを作ろうと思った もしannotation processingでつくるならKotlinPoet触った⽅が良いかなーとつぶやいた

  6. ある⼈から"KotlinPoetを使ってるプロジェクトが︕コン トリどうです︖"と、replyが届いた

  7. それがPermissionsDispatcher

  8. とりあえずissuesを⾒てみる

  9. None
  10. contributionwelcome タグがあるのでみてみた

  11. ⼀つめ Kotlin generation doesn't keep types of Array or ArrayList

    PermissionsDispatcherで⽣成したコードで引数の型が保持されないケースがある 難しそう KotlinPoetに依存して起きているみたいな事がコメントに書かれている︖ PermissionsDispatcherの動きを知るためにも、がーっと⾒てみた
  12. あきらめた どうやら現在はKotlinPoet的にも⼝が⽤意されてないのでできないっぽい 調査する過程でPermissionsDispatcherの動きは何となくわかったのでOKとする

  13. あきらめることも⼤事

  14. 次いってみよう

  15. ⼆つめ Fragment's onActivityResult() is not called when requesting SYSTEM_ALERT_WINDOW permission

    Fragmentで @NeedsPermission(Manifest.permission.SYSTEM_ALERT_WINDOW) の結果が受け 取れない FragmentではなくActivityのonActivityResult()が呼ばれてしまう activity.startActivityForResult() -> fragment.startActivityForResult() とすれば良い SYSTEM_ALERT_WINDOWに対応していたのを初めて知った・・・
  16. 再現確認してみよう

  17. そもそもビルドが通らない︕

  18. そもそもビルドが通らない︕ ⽣成したコードで Fragment.getActivity().hoge みたいなコードがあるけど、 Fragment.getActivity() は nullable なので Support Library

    の v27 から︖ とりあえず !! で逃げる コード⽣成する側で nullable 判定して処理分岐はちょと⼤変そうだったので後回し
  19. とりあえず、再現確認はできるようになった

  20. ふと、コードを眺めていて思った

  21. もしかしてこれ、Kotlin版だけの問題なんじゃね︖

  22. もしかしてこれ、Kotlin版だけの問題なんじゃね︖ Java版とKotlin版は完全にソースが別 どちらも基本的にはKotlinで書かれている Java版はJavaPoetでコード⽣成 Kotlin版はKotlinPoetでコード⽣成 issueで指摘されている問題、試して⾒るとJava版では発⽣しなかった

  23. Java版をベースにKotlin版を修正

  24. がっとPRつくってなげる WWDCのキーノート中にやってた・・・

  25. さっそくレビューして貰えた !! の件は気になるけど、あとで対応しようねーという流れでマージして貰った

  26. 祝︕マージ

  27. 実際にやってみて - その1 いつもとは違う脳みそを使った気がする 初めて⾒るソースの理解には時間がかかる でも、進める内にある程度理解できるようになって楽しかった︕

  28. 実際にやってみて - その2 英語ツラい がんばる Google翻訳も使う メインコントリビューターの⽅々は最悪⽇本語でやりとりできるのでハードル低い つぶやきに反応してくださったり

  29. 実際にやってみて - その3 「オープンソースは別腹」という⾔葉が少し実感できた 普段お世話になっているOSSに(少しでも)貢献できたのは嬉しい︕

  30. 今後

  31. 新たなるissue

  32. 新たなるissue Handling support fragment's getActivity() !! をどうにかしよう、というissue 要はnullチェックを追加すれば良い 楽勝じゃん︖

  33. 楽勝じゃん︖と思ったら

  34. テストか必ず失敗する

  35. テストか必ず失敗する Java版はcompiling-testで実際にコード⽣成し、それのユニットテストを実施している このcompiling-testがWindowsだとうまく動かないことがわかった classpathの区切り⽂字がOSごとに異なるのが考慮されていない ただし、headなら動く・・・が、リリースされていない

  36. ようやくスタート地点にたてた︖

  37. ありがとうございました︕ Let's send PR!