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
470
PermissionsDispatcherにPRをマージしてもらった話
Tomoya Miwa
June 26, 2018
Tweet
Share
More Decks by Tomoya Miwa
See All by Tomoya Miwa
できる!ComposeでCollapsingToolbar
tomoya0x00
0
710
Compose の LazyColumn パフォーマンス改善で取り組んだこと
tomoya0x00
0
1.9k
ComposeのMutableStateってどうやってLocal Unit Testすれば良いの??
tomoya0x00
0
980
意外と簡単?Navigation rail導入のお話
tomoya0x00
0
1.3k
Kotlin Coroutines Flow を触ってみた話し
tomoya0x00
2
740
Android for Carsのお話し
tomoya0x00
1
980
熟成されたアプリのmulti module化(halfway)
tomoya0x00
2
850
コードカバレッジを⾒つつユニットテストを書く
tomoya0x00
0
360
multi module へ向けて
tomoya0x00
0
530
Other Decks in Programming
See All in Programming
A New Era of Testing
mannodermaus
2
530
GraphQLとGigaViewer for Apps
numeroanddev
2
160
Perl 5 OOP機構30年史 - Perl 5's OOP Mechanism over the past 30 years
moznion
0
390
AndroidアプリのUIバリエーションをあの手この手で確認する / Check UI variations of Android apps by various means
tkmnzm
1
200
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
430
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
380
【TID2024】模擬講義:プログラマと一緒にゲームをデザインしてみよう!
akatsukigames_tech
0
680
Scala アプリケーションのビルドを改善してデプロイ時間を 1/4 にした話 | How I improved the build of my Scala application and reduced deployment time by 4x
nomadblacky
1
180
私のEbitengineの第一歩
qt_luigi
0
450
Modern Angular with the NGRX Signal Store New Rules for Your Architecture @BASTA! 2024 in Mainz
manfredsteyer
PRO
0
160
Regular Expressions, REXML, Automata Learning
makenowjust
0
220
大公開!iOS開発の悩みトップ5 〜iOSDC Japan 2024〜
ryunakayama
0
190
Featured
See All Featured
The Cult of Friendly URLs
andyhume
76
6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
8.9k
A better future with KSS
kneath
235
17k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
27
7.4k
Bootstrapping a Software Product
garrettdimon
PRO
304
110k
Designing Experiences People Love
moore
138
23k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
158
15k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
502
140k
The Illustrated Children's Guide to Kubernetes
chrisshort
47
48k
Speed Design
sergeychernyshev
22
430
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!