package Ġcom . talk ing kotlin . adapter Ċ Ċ import Ġandroid . support . v 4 . content . Context Compat Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġcom . talk ing kotlin . R Ċ import Ġcom . talk ing kotlin . model . rss . Item Ċ import Ġcom . talk ing kotlin . util . PRESENT ED _ DATE _ FORMAT Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . episode _ card .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠEp isode s ĠAdapter Ġtransforms Ġthe Ġlist Ġof ĠItems Ġof Ġthe ĠRSS Ġto Ġviews Ġfor Ġits Ġre cycler Ġview Ċ Ġ* Ġ@ author ĠAlex ander ĠG h ers ch on Ċ Ġ*/ Ċ Ċ class ĠEp isode s Adapter ( private Ġvar Ġitems : ĠList < Item > ?, Ġprivate Ġval Ġlistener : Ġ( Item ) Ġ-> ĠUnit ) Ġ: ĠRecyclerView . Adapter < Episode s Adapter . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= ĠEp isode s Adapter :: class . java . simple Name ĊĠĠĠĠĠĠĠ Ġval Ġsimple Date Formatter Ġ= ĠSimpleDateFormat ( PRESENT ED _ DATE _ FORMAT , ĠLocale . EN GL ISH ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( LayoutInflater . from ( parent . context ). inflate ( R . layout . episode _ card , Ġparent , Ġfalse ), Ġlistener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġholder . bind ( items ! ![ position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġitems ?. size Ġ?: Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ) Ġ= Ġposition . to Long () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠView ĠH older Ġclass Ġfor ĠEp isode s Ġviews ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠViewHolder ( override Ġval Ġcontainer View : ĠView ?, Ġlistener : Ġ( Item ) Ġ-> ĠUnit ) Ġ: ĠRecyclerView . ViewHolder ( container View ), ĠLayout Container Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġkeeps Ġthe Ġloaded Ġurl Ġin Ġa Ġproperty Ġto Ġavoid Ġre loading Ġwith Ġthe Ġsame Ġurl ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġurl : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ// Ġinstantiate Ġthe ĠonClick Listener Ġonly Ġonce Ġ( so Ġno ĠSAM Ġconversion Ġhappens Ġin Ġthe Ġbind () Ġfunction ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠonClick Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ?. get ( adapter Position )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ-> Ġlistener . invoke ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠItem ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate . text Ġ= Ġsimple Date Formatter . format ( item . pub Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . text Ġ= Ġitem . title ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchecks Ġfirst Ġthat Ġthe Ġurl Ġrequested Ġbe Ġto Ġloaded Ġwas Ġnot Ġloaded Ġpreviously ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image . tag Ġ== Ġnull Ġ|| Ġimage . tag Ġ!= Ġitem . image !!. href ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( container View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . with ( container View . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( item . image !!. href ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( Context Compat . get Drawable ( container View . context , ĠR . drawable . placeholder )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . tag Ġ= Ġitem . image !!. href ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . text Ġ= Ġitem . description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration . text Ġ= Ġitem . duration ?. value Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġitem . position ?. toInt () Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġitem . duration ?. timestamp ?. toInt () Ġ?: Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . progress . max Ġ= Ġduration Ġ// ĠG OD AM N IT ĠAND ROID ĠIF ĠMAX ĠIS ĠSET ĠAFTER ĠPROG RESS ĠIT ĠDO ES ĠNOT ĠD RAW ĠTHE ĠFIRST ĠTIME ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . progress . progress Ġ= Ġposition ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard . setOnClickListener ( on ClickListener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Episode s ( items : ĠList < Item >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthis . items Ġ= Ġitems ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} Ċ } Ċ