package Ġcom . gar on . hot wheel s . list Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġcom . gar on . hot wheel s . Hot Wheel Application Ċ import Ġcom . gar on . hot wheel s . R Ċ import Ġcom . gar on . hot wheel s . kot ter knife . bind View Ċ import Ġcom . gar on . m vi . Vehicle List Presenter Ċ import Ġcom . gar on . m vi . Vehicle ViewModel Ċ import Ġcom . gar on . m vi . Veh icles Intent Ċ import Ġcom . gar on . m vi . Veh icles State Ċ import Ġcom . gar on . m vi . utils . plus Assign Ċ import Ġcom . jak ew h art on . r xb ind ing 3 . swiper ef resh layout . ref res hes Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠVehicle List Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate () Ġ= ĠVehicle List Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrefresh Layout : ĠSw ipe Refresh Layout Ġby Ġbind View ( R . id . vehicle _ list _ refresh ) ĊĠĠĠ Ġprivate Ġval Ġvehicle List : ĠRecyclerView Ġby Ġbind View ( R . id . vehicle _ list ) ĊĠĠĠ Ġprivate Ġval Ġerror Icon : ĠView Ġby Ġbind View ( R . id . vehicle _ list _ error _ icon ) ĊĠĠĠ Ġprivate Ġval ĠerrorMessage : ĠTextView Ġby Ġbind View ( R . id . vehicle _ list _ error ) ĊĊĠĠĠ Ġprivate Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĠĠĠ Ġprivate Ġval Ġclick Publisher Ġ= ĠPublish Subject . create < Vehicle ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġadapter Ġ= ĠVehicle ListAdapter Ġ{ Ġclick Publisher . onNext ( it ) Ġ} ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpresenter : ĠVehicle List Presenter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ= ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . layout . vehicle _ list _ fragment , Ġcontainer , Ġfalse ) ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinject () ĊĊĠĠĠĠĠĠĠ Ġdis posable Ġ+= Ġpresenter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. states () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (:: render ) ĊĠĠĠĠĠĠĠ Ġdis posable Ġ+= Ġpresenter . process Intent s ( intent ions ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġvehicle List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġvehicle List . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġval Ġload Listener Ġ= ĠEnd less Scroll Listener ( layout Manager , Ġ{}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġintent ions (): ĠObservable < Veh icles Intent > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . merge ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( Veh icles Intent . Initial Intent ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Layout . ref res hes () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠV eh icles Intent . Refresh Intent Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Publisher . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV eh icles Intent . View Vehicle Intent ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinject (): ĠUnit ? Ġ= ĊĠĠĠĠĠĠĠ Ġactivity ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . application Ġas ĠHot Wheel Application ). app Component ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. component Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. activity ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĊĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠĠĠĠĠ Ġpresenter . destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender ( state : ĠV eh icles State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh Layout . is Refresh ing Ġ= Ġstate . isLoading ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( state . isError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvehicle List . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Icon . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . text Ġ= ĠgetString ( R . string . generic _ error _ message ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvehicle List . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Icon . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Data ( state . list , Ġstate . is Ref reshed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ