package Ġsoup . movie . home Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . core . util . Pair Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ext . Id Based Diff Callback Ċ import Ġsoup . movie . binding . Data Binding ListAdapter Ċ import Ġsoup . movie . binding . Data Binding ViewHolder Ċ import Ġsoup . movie . ext .* Ċ import Ġsoup . movie . home . databinding . Home Item Movie Binding Ċ import Ġsoup . movie . model . Movie Ċ import Ġsoup . movie . util . setOn De bounce ClickListener Ċ Ċ class ĠHome Contents ListAdapter ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġdiff Callback : ĠDiff Util . Item Callback < Movie > Ġ= ĠId Based Diff Callback Ġ{ Ġit . id Ġ}, ĊĠĠĠ Ġprivate Ġval Ġlistener : Ġ( Movie , ĠArray < Pair < View , ĠString >>) Ġ-> ĠUnit Ċ ) Ġ: ĠData Binding ListAdapter < Movie >( diff Callback ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( context ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠMovie ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠHome Item Movie Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMovie ViewHolder ( binding ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn De bounce ClickListener ( delay Ġ= Ġ 1 5 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġin Ġ 0 .. item Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie : ĠMovie Ġ= ĠgetItem ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ( movie , Ġcreate Shared Elements ( movie )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġin Ġ 0 .. item Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie : ĠMovie Ġ= ĠgetItem ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. context ?. show Toast ( movie . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= ĠR . layout . home _ item _ movie ĊĊĠĠĠ Ġprivate Ġfun ĠMovie ViewHolder . create Shared Elements ( movie : ĠMovie ): ĠArray < Pair < View , ĠString >> Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshared Elements Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground View Ġto ĠR . string . transition _ background , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter View Ġto ĠR . string . transition _ poster , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġage Bg View Ġto ĠR . string . transition _ age _ bg ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie . isNew ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements . add ( new View Ġto ĠR . string . transition _ new ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie . is Best ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements . add ( best View Ġto ĠR . string . transition _ best ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie . is DD ay ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Elements . add ( d Day View Ġto ĠR . string . transition _ d _ day ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġshared Elements . to Typed Array () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġin fix Ġfun ĠView . to (@ String Res Ġtag Id : ĠInt ): ĠPair < View , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( this , Ġcontext . getString ( tag Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMovie ViewHolder ( binding : ĠHome Item Movie Binding ) Ġ: ĠData Binding ViewHolder < Movie >( binding ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbackground View Ġ= Ġbinding . background View ĊĠĠĠĠĠĠĠ Ġval Ġposter View Ġ= Ġbinding . poster View ĊĠĠĠĠĠĠĠ Ġval Ġage Bg View Ġ= Ġbinding . age Bg View . root ĊĠĠĠĠĠĠĠ Ġval Ġnew View Ġ= Ġbinding . new View . root ĊĠĠĠĠĠĠĠ Ġval Ġbest View Ġ= Ġbinding . best View . root ĊĠĠĠĠĠĠĠ Ġval Ġd Day View Ġ= Ġbinding . d Day View . root ĊĠĠĠ Ġ} Ċ } Ċ