package Ġcom . g ok han alic ci i . trend y gif s . ui . list Ċ Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Visible ForTesting Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . view . View Ċ import Ġcom . g ok han alic ci i . trend y gif s . R Ċ import Ġcom . g ok han alic ci i . trend y gif s . core . base . Bind able ViewModel Fragment Ċ import Ġcom . g ok han alic ci i . trend y gif s . core . router . Gif Detail Router Ċ import Ġcom . g ok han alic ci i . trend y gif s . core . view model . ViewModel Factory Ċ import Ġcom . g ok han alic ci i . trend y gif s . databinding . Fragment Gif List Binding Ċ import Ġcom . g ok han alic ci i . trend y gif s . domain . model . Gif UI Item Ċ import Ġcom . g ok han alic ci i . trend y gif s . ui . list . adapter . Gif ListAdapter Ċ import Ġcom . g ok han alic ci i . trend y gif s . util . getRandom Color Ċ import Ġcom . g ok han alic ci i . trend y gif s . util . get White Color Ċ import Ġcom . g ok han alic ci i . trend y gif s . util . gif loader . G lide Gif Loader Ċ import Ġcom . g ok han alic ci i . trend y gif s . util . recyclerview . ItemClickListener Ċ import Ġcom . g ok han alic ci i . trend y gif s . util . recyclerview . RecyclerView Load More Listener Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġg ok han . al ici Ġon Ġ 2 4 . 0 2 . 2 0 1 9 Ċ Ġ* ĠI Ġneed Ġto Ġinject Ġfields Ġlike ĠG if Router , ĠViewModel Factory Ċ Ġ*/ Ċ class ĠG if List Fragment Ġ: ĊĠĠĠ ĠBind able ViewModel Fragment < Fragment Gif List Binding , ĠG if List ViewModel >(), ĊĠĠĠ ĠItem ClickListener < Gif UI Item > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOLOR _ REFRESH _ FREQ UENCY Ġ= Ġ 3 0 0 L ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠG if List Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġlayout Res : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . layout . fragment _ gif _ list ĊĊĠĠĠ Ġoverride Ġval ĠviewModel Factory : ĠViewModel Provider . Factory ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠViewModel Factory ( context !! ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġgif Detail Router : ĠG if Detail Router ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġload More Listener : ĠRecyclerView Load More Listener ĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable : ĠComposite Disposable Ġby Ġlazy Ġ{ ĠComposite Disposable () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewModel (): ĠClass < Gif List ViewModel > Ġ= ĠG if List ViewModel :: class . java ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġgif Detail Router Ġ= ĠG if Detail Router ( fragment Manager !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Binding Ready ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= ĠGrid LayoutManager ( context , Ġget Column Count ()) ĊĠĠĠĠĠĠĠ Ġval Ġgif ListAdapter Ġ= ĠG if ListAdapter ( G lide Gif Loader (), Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġload More Listener Ġ= ĠRecyclerView Load More Listener ( grid LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load G ifs () ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . re cyclerView Gif . add On Scroll Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Binding . re cyclerView Gif . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġgrid LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġgif ListAdapter ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . gif List (). observe ( this , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgif ListAdapter . update List ( it !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . more G ifs Loading Observer (). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . bottom Loading Visible Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . content G ifs Loading Observer (). observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . content Loading Visible Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Random Color Until Data Load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . loading Color Ġ= Ġget White Color () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( gif UI Item : ĠG if UI Item , Ġview : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġgif Detail Router . route To Detail ( gif UI Item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . load G ifs () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Column Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresources . getInteger ( R . integer . trend _ list _ column _ count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Random Color Until Data Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . content Loading Visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . interval ( COLOR _ REFRESH _ FREQ UENCY , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ Ġun us ued Ġ-> Ġshow Random Color () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Random Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . content Loading Visible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview Binding . loading Color Ġ= ĠgetRandom Color () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĊĠĠĠĠĠĠĠ Ġview Binding . re cyclerView Gif . remove On Scroll Listener ( load More Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Visible ForTesting ĊĠĠĠ Ġfun Ġinject ViewModel Factory ( unused : ĠViewModel Provider . Factory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** Ġfix me ĊĠĠĠĠĠĠĠĠ Ġ* Ġmy Ġpurpose Ġwas Ġchanging ĠviewModel Factory Ġto Ġstub bing Ġview Ġmodel ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ} Ċ }