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
530
PermissionsDispatcherにPRをマージしてもらった話
Tomoya Miwa
June 26, 2018
Tweet
Share
More Decks by Tomoya Miwa
See All by Tomoya Miwa
基礎から学ぶ大画面対応(Learning Large-Screen Support from the Ground Up)
tomoya0x00
0
7.1k
Re:VIEWで書いた「Compose で Android の edge-to-edge に対応する」をRoo Codeで発表資料にしてもらった
tomoya0x00
0
550
Compose 1.7のTextFieldはPOBox Plusで日本語変換できない
tomoya0x00
0
410
できる!ComposeでCollapsingToolbar
tomoya0x00
0
1k
Compose の LazyColumn パフォーマンス改善で取り組んだこと
tomoya0x00
0
2.3k
ComposeのMutableStateってどうやってLocal Unit Testすれば良いの??
tomoya0x00
0
1.2k
意外と簡単?Navigation rail導入のお話
tomoya0x00
0
1.5k
Kotlin Coroutines Flow を触ってみた話し
tomoya0x00
2
850
Android for Carsのお話し
tomoya0x00
1
1.1k
Other Decks in Programming
See All in Programming
どの様にAIエージェントと 協業すべきだったのか?
takefumiyoshii
2
590
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
4.3k
実践AIチャットボットUI実装入門
syumai
7
2.4k
ABEMAモバイルアプリが Kotlin Multiplatformと歩んだ5年 ─ 導入と運用、成功と課題 / iOSDC 2025
akkyie
0
320
株式会社 Sun terras カンパニーデック
sunterras
0
220
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
920
Introducing ReActionView: A new ActionView-Compatible ERB Engine @ Kaigi on Rails 2025, Tokyo, Japan
marcoroth
3
910
iOSDC.pdf
chronos2500
2
660
Let's Write a Train Tracking Algorithm
twocentstudios
0
220
Чего вы не знали о строках в Python – Василий Рябов, PythoNN
sobolevn
0
160
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
370
CSC305 Lecture 02
javiergs
PRO
1
260
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
What's in a price? How to price your products and services
michaelherold
246
12k
Six Lessons from altMBA
skipperchong
28
4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Build your cross-platform service in a week with App Engine
jlugia
232
18k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Agile that works and the tools we love
rasmusluckow
331
21k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
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!