言いたいことはそれだけか

KotlinとかAndroidとかが好きです。調べたことをメモします。٩( 'ω' )و

Scoped Storageでパス指定してファイルにアクセスできなくなった

はじめに 見て見ぬふりをしてきたScoped Storageにハマったのでメモ書きを残す。 Android Q (10) から導入されたScoped Storage。「端末内部のfileやらのアクセス権限周りや保存領域が変わったんだろうなー」くらいの雑な理解で見て見ぬふりを続けてきたが思…

複数のsubscribersに対応したFlowとテストの書き方

MVVMアーキテクチャにおいて、一つのModelを複数のView Modelで共有している場合、あるイベントを複数のView Modelで同時に受け取りたいことがある。これをKotlin Coroutine Flowを使って書くとどうなるのかなぁと思ったのでやってみたメモ。テストも書いた…

Paging Library 3の内部実装読んだメモ書き

はじめに Paging Library 3が発表された際、Full Kotlinで書かれてCoroutineもたくさん使われているということで話題になった。せっかくなので内部実装を読んでみた時のメモを雑に残しておく。 今回みたバージョンは 3.0.0-alpha01 PagingLibraryをどう使う…

MotionLayoutの覚書き

はじめに MotionLayoutが発表されて随分経った。「Android Studio 4系が必須でMotion Editorが来るのを待っていた」という言い訳で長い間スルーしていたが、そろそろ4系が安定して来たという話をちらほら聞くのでちょっとさわってみた。結果、Motion Editor…

KoinのDIの仕組み

はじめに みなさん、Koinはお好きだろうか? KoinとはKotlin用の軽量DI Frameworkである。 insert-koin.io 基本的には下記の3 stepでお手軽にDIの仕組みを提供してくれる。 moduleの宣言 Koinのstart 任意の場所でinject Injectする際にinject()というcustom…

AndroidからGoogle Sign In経由、AWS Cognitoでuser管理してDynamo DBを操作する ~AWS Java SDKを添えて~

ふと、「そういえばNo SQLのDBって業務で関わったことないな」と思いついたのでAWS DynamoDBをさわってみることにした。 Androidから直接さわるためAWS Java SDKを利用したが、ググって引っかかる情報は結構古くてもう存在しないAPIを使っていたり、公式docu…

"Hacking with iOS Online" を完走した

産休中で暇だったので、オンラインの無料iOSハンズオンコース的なやつである "Hacking with iOS Online" をコツコツ進めており、無事本日完走した✌️ www.hackingwithswift.com よかった点 このコースには39個のプロジェクトがあり、平日一日一つずつ終わらせ…

保育園の新園開設情報ページの更新を監視したい

産休に入って時間があるので、今まで手動でチェックしていた保育園の新園開設情報ページの更新をスクレイピングして監視することにした。1 0. 注意事項 スクレイピングに関しては実行前に一度 こちらを読むことをお勧めします。 今回自分のケースでいうと、…

androidx.benchmarkの1.0.0がリリースされたので試してみる

Android Dev Summit 2019の下記のセッションで軽くふれられていた androidx.benchmark の1.0.0がリリースされたようなのでさわってみます。このセッションはbenchmarkの使い方を説明したものではないけど、色々と面白いのでおすすめです。 www.youtube.com …

ConstraintLayout 2.0でFlexboxLayoutとGridLayoutを代用する

はじめに ConstraintLayout 2.0から導入された Flow を使ってFlexboxLayoutやGridLayoutと同じようなことができるようになる。 androidstudio.googleblog.com developer.android.com こんな感じでできた。 (上がFlexboxLayoutっぽいやつ、下がGridLayoutっ…

Androidのdark theme

Androidのdark themeをさわってみたのでメモを残す。 Dark themeとは? 公式documentはこちら developer.android.com 電池の節約だったり、low visionなuser向けにより良いUIを提供することを目的に、黒背景のthemeがAndroid Q からサポートされた。 アプリ…

Activity Shared Element TransitionでActivityが多重起動されるとAnimationがおかしくなる

はじめに Activity Shared Element TransitionでActivityが多重起動されるとAnimationがおかしくなる現象を見つけて面白かったので調べてみた。 具体的に まずは下記のgifを見てほしい。リストアイテム押下時にわざと1秒のdelayを入れてstartActivity()して…

Javaのmethod referenceは初回しか評価されない

はじめに 言いたいことは掲題の通り。method referenceを渡しちゃうと実行時に毎度評価されるわけではない。 毎度評価されたければlambdaを渡した方がいい。 Reference 公式のドキュメントには以下のように記述がある。 Chapter 15. Expressions The timing …

AppBarLayoutを使う時にlayout_behaviorをFragmentに持たせるとviewが重ねて表示される

困った問題に出会ったのでメモ。 AppBarLayoutがActivityにいて、layout_behaviorつけたscrollableなviewがFragmentにいる場合、AppBarLayoutはちゃんと動くんだけど、scrollするviewの方がAppBarLayoutと同じ高さからlayoutされるので隠れてしまう…みんな同…

Kotlin Bytecodeを読みたいけど、何から勉強したらいいかわからないあなたへ。ASMのドキュメントを読みましょう。

はじめに このblog postは半年以上下書き放置していて自分の中では旬がすぎた話題ではありますが、最近Android系日本語技術podcastであるdex.fmのep.66でbytecodeが話題になったので、勿体無い精神で公開します :pray: それではどうぞ。 Kotlin書いていると…

TabItemをxml layout fileに記述してもview hierarchyからfindViewById()できない理由

TabItem、xml layout fileに書いててもViewHierarchyに追加されないの知らなくて昨日すごく時間を無駄にしたhttps://t.co/hc8WyqfHV2— むーむー/Atsuko FUKUI (@muumuumuumuu) January 31, 2019 Tweetにリンクを貼っている通り、公式ドキュメントによると Ta…

TabLayoutでいい感じにアイコンをつけたい時のメモ

ViewPagerとかと併用してTabLayoutを使う場合に、特定のタブにアイコンを表示する時にどうすればいいかなーという時のメモ。1 今のところは Tab#setCustomView() でcustome layout resourceをセットするのが大体のケースにおいて現実解となりそう。 また、こ…

便利なTextInputLayoutとその内部実装

はじめに Material Designにいつの間にか入っていたTextInputLayoutが便利なのでメモを残す。 TextInputLayout とは 公式ドキュメント によると、TextInputLayout とは「テキストを入力する時にhintを隠す代わりにfloating labelを表示するEditTextをラップ…

2018年後半を振り返る

はじめに 2018年後半に自分が何をしていたか後から振り返られるようにメモを残しておく。前回のまとめはこちら。 muumuutech.hatenablog.com 7月 ランチでビリヤニ食べたら風邪なおってきた気がする— むーむー/Atsuko FUKUI (@muumuumuumuu) July 3, 2018 今…

RecyclerView in RecyclerViewだとAppBarLayoutがスクロールしないことがある

Nested Scroll(RecyclerView in RecyclerView)とAppBarの組み合わせでうまくいかないことがあったのでメモします。 前提 RecyclerViewが入れ子になってNested Scrollする画面で、 Parent RecyclerViewはvertical scroll Child RecyclerViewはhorizontal scro…

selectableItemBackgroundはBackgroundにセットしないと意図した挙動にならない話

タイトルが意味わからないことになっている はじめに AndroidはAPI Level 21 (Android 5.0 / Lollipop) からRipple Effectがサポートされ、これによりより良いタッチフィードバックをユーザに提供できることができる。ボタンなど、「もともとタップが想定さ…

Shared element transitionでリストの要素を並び替える

やりたいこと Fragmentを切り替えてReordering(要素を並び替え)する shared element transition の記事を見て楽しそうだったからやってみた。 medium.com 全く同じことをやっても楽しくないので、Fragment <-> Activityでやってみる。 できた いきなりだけ…

2018年前半を振り返る

はじめに 2018年前半に自分が何をしていたか後から振り返られるようにメモを残しておく。2017年のまとめと同じく自分のtweetを振り返ってペタペタしていく。本当は年末にまとめて一年分やりたかったがtweet数が多すぎて一気にやると辛いという前回の反省を生…

Android Frameworkのコードにbreakpointを止めるメモ

Android開発をしていると、Frameworkがどういう挙動をしているか調べたくなる時がある。そういう時はFrameworkのコードにbreakpointを置くんだけど、止まってくれたり止まらなかったりすることがあるので困っていた。 完全に理解した!と言いたいけど、ViewR…

StateListAnimatorを使ってXMLだけでAnimationをつける

こちらの記事を読んで「<selector> の中にobject animator埋め込めるの知らなかった!!すげー!!!!」となったので遊んでみたメモ。 android.jlelse.eu StateListAnimator AndroidにはStateListAnimatorというクラスがあって、Viewのdrawable stateによってAnimatio</selector>…

KotlinのRegexとDestructuredで文字列からdata classに変換する

Androidでアプリを書いていて、正規表現を扱うときにjava.util.regex.Matcherを使うこと多いが、あれは個人的には好きではない。もっとスッキリかけるんじゃないかなぁといつも思ってしまう。 例えば、URLからprotocolとdomainを正規表現を使って取り出すコ…

kotlin.concurrent.threadは新規threadが作成されるけどcurrent threadのgroupで動く

[2018.7.15 ご指摘いただき記事の最後に追記しました] あらまし 先日おもしろいTweetを見つけたのでちょっと調べてみたメモ。 別ActivityでUI操作の必要なマルチスレッド処理をしたいとき、runOnUiThreadを使わないとMarshmallowならクラッシュするけど、Ore…

RxTextView#textChanges()でdistinctUntilChangedする時にeventが流れない時がある

みんな大好きRxBinding1 ですが、ちょっとハマることがあったのでメモ。 RxTextView#textChanges() で EditText の入力イベントを監視する。その時に重複した入力をdistinctUntilChanged()で削ろうとしたら以降何もeventが流れない現象に遭遇した。 RxTextVi…

@JvmOverloadsなfunctionをmockできないケースがある

@JvmOverloadsを付与したKotlinのfunctionを、Javaから呼び出すコードを書いた。ここのテストを書こうと思ってmockito-kotlinでmockしようとしてできなかったときのメモ。ちなみにmockしたいクラスはDagger2でDIしている前提。 やりたかったこと 例えばこん…

アメリカでUberにiPhone置き忘れて無事に回収した。SIMは通話付きを買おうな!

[2018/06/13 追記しました] 事の顛末 一週間くらい出張でUS(CA, Palo Alto)に来ている。Palo AltoはSan Fransiscoと異なり移動は車が基本になる。なので出勤はUberを利用しているのだが、車内にiPhoneを置き忘れる事件が発生。先日のGoogle I/OでiPhoneを置…