/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġy in pin ji u @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġlit eref resh . sample . ui . fragment Ċ Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . coordinator layout . widget . Coordinator Layout Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġlit eref resh . Lite Refresh Ċ import Ġlit eref resh . On Refresh Listener Ċ import Ġlit eref resh . On Scroll Listener Ċ import Ġlit eref resh . behavior . Refresh Content Behavior Ċ import Ġlit eref resh . behavior . Refresh Header Behavior Ċ import Ġlit eref resh . sample . R Ċ import Ġlit eref resh . sample . base . model . Resource Ċ import Ġlit eref resh . sample . base . ui . Base Fragment Ċ import Ġlit eref resh . sample . databinding . Fragment Col lapsible Header Binding Ċ import Ġlit eref resh . sample . model . Un splash Photo Page Ċ import Ġlit eref resh . sample . vm . Un splash ViewModel Ċ import Ġlayout binder . annotations . Bind Layout Ċ Ċ class ĠCol lapsible Header Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġval Ġun splash ViewModel : ĠUn splash ViewModel Ġby Ġactivity ViewModels () ĊĠĠĠ Ġ@ Bind Layout ( value Ġ= ĠR . layout . fragment _ collapsible _ header ) ĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠFragment Col lapsible Header Binding ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġheader Behavior Ġ= ĠLite Refresh . get Attached Behavior < Refresh Header Behavior < *> >( binding !!. view Header ) ĊĠĠĠĠĠĠĠ Ġval Ġcontent Behavior Ġ= ĠLite Refresh . get Attached Behavior < Refresh Content Behavior < *> >( binding !!. view Content ) ĊĠĠĠĠĠĠĠ Ġbinding !!. circle Progress . setColor ( resources . getColor ( R . color . color Accent )) ĊĠĠĠĠĠĠĠ Ġbinding !!. image Pager Header . set FragmentManager ( child FragmentManager ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġchild FragmentManager . find Fragment ById ( R . id . fragment ) Ġas ĠUn splash Photo Grid Fragment ? ĊĠĠĠĠĠĠĠ Ġun splash ViewModel !!. random Photos Result . observe ( view Lifecycle Owner , ĠObserver < Resource < Un splash Photo Page >> Ġ{ Ġlist Resource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġlist Resource ) Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Resource . data Ġ== Ġnull ) Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Resource . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Resource . data . is First Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphotos Ġ= Ġlist Resource . data . photos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photos Ġ== Ġnull Ġ|| Ġphotos . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment !!. refresh Error ( Exception (" Empty Ġdata .")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photos . size Ġ> Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. image Pager Header . set Images ( photos . sub List ( 0 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment !!. set Payload s ( photos . sub List ( 3 , Ġphotos . size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. image Pager Header . set Images ( photos . sub List ( 0 , Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photos . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment !!. set Payload s ( photos . sub List ( 1 , Ġphotos . size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment !!. add Payload s ( list Resource . data . photos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Behavior !!. refresh Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( list Resource . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Resource . data . is First Page ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment !!. refresh Error ( list Resource . throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Behavior !!. refresh Error ( list Resource . throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( header Behavior Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Behavior . add On Scroll Listener ( object Ġ: ĠOn Scroll Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdrawable Ġ= ĠColor Drawable ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Scroll ( parent : ĠCoord inator Layout , Ġview : ĠView , Ġinitial : ĠInt , Ġtrigger : ĠInt , Ġmin : ĠInt , Ġmax : ĠInt , Ġtype : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Scroll ( parent : ĠCoord inator Layout , Ġview : ĠView , Ġcurrent : ĠInt , Ġinitial : ĠInt , Ġtrigger : ĠInt , Ġmin : ĠInt , Ġmax : ĠInt , Ġtype : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll ( parent : ĠCoord inator Layout , Ġview : ĠView , Ġcurrent : ĠInt , Ġdelta : ĠInt , Ġinitial : ĠInt , Ġtrigger : ĠInt , Ġmin : ĠInt , Ġmax : ĠInt , Ġtype : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġheader 's Ġtranslation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ<= Ġinitial ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġinitial Ġ- Ġcurrent . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. view Header . translation Y Ġ= Ġy Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġ 1 Ġ- Ġcurrent . toFloat () Ġ/ Ġinitial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . alpha Ġ= Ġ( alpha Ġ* Ġ 1 9 6 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. view Header . foreground Ġ= Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġprogress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. circle Progress . set Progress ( Math . max ( 0 f , Ġcurrent . toFloat () Ġ/ Ġtrigger )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġapp bar 's Ġtranslation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ>= Ġmin ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Max Ġ= Ġinitial Ġ- Ġmin . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġcurrent Ġ- Ġmin . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalpha Ġ= Ġ 1 Ġ- Ġdistance Ġ/ Ġrange Max ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. app Bar . alpha Ġ= Ġalpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. app Bar . translation Y Ġ= Ġalpha Ġ* Ġmin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Scroll ( parent : ĠCoord inator Layout , Ġview : ĠView , Ġcurrent : ĠInt , Ġinitial : ĠInt , Ġtrigger : ĠInt , Ġmin : ĠInt , Ġmax : ĠInt , Ġtype : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Behavior . add On Refresh Listener ( object Ġ: ĠOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Refresh Start () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. circle Progress . reset Style () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Release To Refresh () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. circle Progress . fill Circle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. circle Progress . start Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun splash ViewModel !!. first Page () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Refresh End ( throwable : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. circle Progress . stop Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( unsplash ViewModel !!. random Photos Result . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Behavior !!. refresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance (): ĠCol lapsible Header Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠCol lapsible Header Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }