package Ġcom . github . q ing me i 2 . sample . ui . main . common Ċ Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġarrow . core . left Ċ import Ġarrow . core . right Ċ import Ġcom . github . q ing me i 2 . sample . entity . Errors Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable Transformer Ċ import Ġio . reactivex . rx kotlin . zip With Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠThe Ġ[ Observable Transformer ] Ġthat Ġmake Ġ[ RecyclerView ] ĠScroll Ġstate Ġtransform Ġto Ċ Ġ* ĠVis ible Ġstate . Ċ Ġ*/ Ċ val Ġscroll State Processor : ĠObservable Transformer < Int , ĠBoolean > ĊĠĠĠ Ġget () Ġ= ĠObservable Transformer Ġ{ Ġscroll State Ġ-> ĊĠĠĠĠĠĠĠ Ġscroll State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose Ġ{ Ġupstream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupstream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip With ( upstream . start With ( true )) Ġ{ Ġlast , Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( last Ġ== Ġcurrent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠErrors . Empty Input Error . left () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġcurrent . right () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġchanged Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchanged . fold ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . empty < Boolean >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}