Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PermissionsDispatcherにPRをマージしてもらった話
Search
Tomoya Miwa
June 26, 2018
Programming
1
500
PermissionsDispatcherにPRをマージしてもらった話
Tomoya Miwa
June 26, 2018
Tweet
Share
More Decks by Tomoya Miwa
See All by Tomoya Miwa
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
320
できる!ComposeでCollapsingToolbar
tomoya0x00
0
880
Compose の LazyColumn パフォーマンス改善で取り組んだこと
tomoya0x00
0
2.1k
ComposeのMutableStateってどうやってLocal Unit Testすれば良いの??
tomoya0x00
0
1.1k
意外と簡単?Navigation rail導入のお話
tomoya0x00
0
1.4k
Kotlin Coroutines Flow を触ってみた話し
tomoya0x00
2
800
Android for Carsのお話し
tomoya0x00
1
1k
熟成されたアプリのmulti module化(halfway)
tomoya0x00
2
910
コードカバレッジを⾒つつユニットテストを書く
tomoya0x00
0
380
Other Decks in Programming
See All in Programming
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
950
SwiftUI移行のためのインプレッショントラッキング基盤の構築
kokihirokawa
0
160
Formの複雑さに立ち向かう
bmthd
1
940
Unity Android XR入門
sakutama_11
0
180
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
8
1.5k
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
41
16k
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
1.1k
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.6k
From the Wild into the Clouds - Laravel Meetup Talk
neverything
0
170
Jakarta EE meets AI
ivargrimstad
0
530
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
280
コードを読んで理解するko build
bells17
1
110
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
Six Lessons from altMBA
skipperchong
27
3.6k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
Done Done
chrislema
182
16k
Statistics for Hackers
jakevdp
797
220k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Making Projects Easy
brettharned
116
6k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
10
520
Building Adaptive Systems
keathley
40
2.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
380
Transcript
PermissionsDispatcherにPRをマージしてもらった話し tomoya0x00 shibuya.apk #26
簡単に⾃⼰紹介 tomoya0x00 Twitter, GitHub, Qiita Android, Embedded system, BLE/BT, iOS
DeNA Co., Ltd. Automotive Business Unit.
初めてまともにOSSのPRを書いてマージしてもらった これまでもtypo修正とかはあったんだけど… 皆様がPRを出すきっかけになれば 技術的な話しはほとんどしません
PRのきっかけ
PRのきっかけ KotlinでStateMachineのライブラリを作ろうと思った もしannotation processingでつくるならKotlinPoet触った⽅が良いかなーとつぶやいた
ある⼈から"KotlinPoetを使ってるプロジェクトが︕コン トリどうです︖"と、replyが届いた
それがPermissionsDispatcher
とりあえずissuesを⾒てみる
None
contributionwelcome タグがあるのでみてみた
⼀つめ Kotlin generation doesn't keep types of Array or ArrayList
PermissionsDispatcherで⽣成したコードで引数の型が保持されないケースがある 難しそう KotlinPoetに依存して起きているみたいな事がコメントに書かれている︖ PermissionsDispatcherの動きを知るためにも、がーっと⾒てみた
あきらめた どうやら現在はKotlinPoet的にも⼝が⽤意されてないのでできないっぽい 調査する過程でPermissionsDispatcherの動きは何となくわかったのでOKとする
あきらめることも⼤事
次いってみよう
⼆つめ 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に対応していたのを初めて知った・・・
再現確認してみよう
そもそもビルドが通らない︕
そもそもビルドが通らない︕ ⽣成したコードで Fragment.getActivity().hoge みたいなコードがあるけど、 Fragment.getActivity() は nullable なので Support Library
の v27 から︖ とりあえず !! で逃げる コード⽣成する側で nullable 判定して処理分岐はちょと⼤変そうだったので後回し
とりあえず、再現確認はできるようになった
ふと、コードを眺めていて思った
もしかしてこれ、Kotlin版だけの問題なんじゃね︖
もしかしてこれ、Kotlin版だけの問題なんじゃね︖ Java版とKotlin版は完全にソースが別 どちらも基本的にはKotlinで書かれている Java版はJavaPoetでコード⽣成 Kotlin版はKotlinPoetでコード⽣成 issueで指摘されている問題、試して⾒るとJava版では発⽣しなかった
Java版をベースにKotlin版を修正
がっとPRつくってなげる WWDCのキーノート中にやってた・・・
さっそくレビューして貰えた !! の件は気になるけど、あとで対応しようねーという流れでマージして貰った
祝︕マージ
実際にやってみて - その1 いつもとは違う脳みそを使った気がする 初めて⾒るソースの理解には時間がかかる でも、進める内にある程度理解できるようになって楽しかった︕
実際にやってみて - その2 英語ツラい がんばる Google翻訳も使う メインコントリビューターの⽅々は最悪⽇本語でやりとりできるのでハードル低い つぶやきに反応してくださったり
実際にやってみて - その3 「オープンソースは別腹」という⾔葉が少し実感できた 普段お世話になっているOSSに(少しでも)貢献できたのは嬉しい︕
今後
新たなるissue
新たなるissue Handling support fragment's getActivity() !! をどうにかしよう、というissue 要はnullチェックを追加すれば良い 楽勝じゃん︖
楽勝じゃん︖と思ったら
テストか必ず失敗する
テストか必ず失敗する Java版はcompiling-testで実際にコード⽣成し、それのユニットテストを実施している このcompiling-testがWindowsだとうまく動かないことがわかった classpathの区切り⽂字がOSごとに異なるのが考慮されていない ただし、headなら動く・・・が、リリースされていない
ようやくスタート地点にたてた︖
ありがとうございました︕ Let's send PR!