package Ġmov i ester . orno y man . com . mov i ester . presentation . movies . discovery Ċ Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . jak ew h art on . r xb ind ing 2 . view . click s Ċ import Ġcom . squareup . pic asso . Callback Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . movie _ item . view .* Ċ import Ġmov i ester . orno y man . com . mov i ester . R Ċ import Ġmov i ester . orno y man . com . mov i ester . domain . BASE _ IMAGE _ URI Ċ import Ġmov i ester . orno y man . com . mov i ester . domain . models . Movie Item Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠMov ies Adapter ( movies : ĠList < Movie Item >) Ġ: ĠRecyclerView . Adapter < Movies Adapter . Movie ViewHolder >() Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmovies Source : ĠMutable List < Movie Item > Ġ= Ġmovies . to Mutable List () ĊĠĠĠ Ġprivate Ġval Ġmovie Item Clicked Ġ= ĠPublish Subject . create < Movie Item >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMovie ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . movie _ item , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMovie ViewHolder ( item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠMovie ViewHolder , Ġposition : ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġclicked Ġ= Ġ Ġholder . bind ( movies Source [ position ]) ĊĠĠĠĠĠĠĠ Ġclicked . do On Next Ġ{ ĠTim ber . w (" click Ġon Ġ$ it ") Ġ}. subscribe ( movie Item Clicked ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Re cyc led ( holder : ĠMovie ViewHolder ) Ġ= Ġholder . unbind () ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġmovies Source . size ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Source [ position ]. id ?. to Long () Ġ?: Ġsuper . getItem Id ( position ) ĊĊĠĠĠ Ġfun Ġappend Movies ( new Movies : ĠList < Movie Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġposition Start Ġ= Ġmovies Source . size ĊĠĠĠĠĠĠĠ Ġmovies Source Ġ+= Ġnew Movies ĊĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( position Start , Ġnew Movies . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġmovies Source . clear () ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmovie Clicked (): ĠObservable < Movie Item > Ġ= Ġmovie Item Clicked . hide () ĊĊĠĠĠ Ġclass ĠMovie ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ), ĠLayout Container Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Loaded Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer View : ĠView ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠitemView ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( movie : ĠMovie Item ): ĠObservable < Movie Item > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun bind () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView ?. movie _ title ?. text Ġ= Ġmovie . title ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( BASE _ IMAGE _ URI Ġ+ Ġmovie . poster Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. tag ( hashCode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit (). center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( item View ?. movie _ poster , Ġobject Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w ( e , Ġ" failed Ġto Ġload Ġposter Ġfor Ġ$ movie ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠitemView . click s (). filter Ġ{ Ġis Loaded Ġ}. map Ġ{ Ġmovie Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġun bind () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Loaded Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . get (). cancel Tag ( hashCode ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }