package Ġcom . example . android . dev byte viewer . ui Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġco il . load Ċ import Ġcom . example . android . dev byte viewer . R Ċ import Ġcom . example . android . dev byte viewer . databinding . Dev byte Item Binding Ċ import Ġcom . example . android . dev byte viewer . domain . Dev Byte Video Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ Ċ class ĠDev Byte Adapter ( private Ġval ĠonClick : ĠDev Byte Action . OnClick ) Ġ: ĊĠĠĠ ĠList Adapter < Dev Byte Video , ĠRecyclerView . ViewHolder >( Dev Byte Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġadapter Scope Ġ= ĠCor outine Scope ( Dispatch ers . Default ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDev Byte ViewHolder . from ( parent , ĠonClick ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDev Byte ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Ġ= ĠgetItem ( position ) Ġas ĠDev Byte Video ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( video ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠDev Byte ViewHolder ( view : ĠView , Ġprivate Ġval ĠonClick : ĠDev Byte Action . OnClick ) Ġ: ĊĠĠĠ ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĊĠĠĠ Ġfun Ġbind ( video : ĠDev Byte Video ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Binding Ġ= ĠDev byte Item Binding . bind ( item View ) ĊĠĠĠĠĠĠĠ Ġval Ġresources Ġ= ĠitemView . context . resources ĊĊĠĠĠĠĠĠĠ Ġval Ġvideo Thumbnail Ġ= Ġview Binding . video Thumbnail ĊĠĠĠĠĠĠĠ Ġval Ġclick able Overlay Ġ= Ġview Binding . click able Overlay ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġview Binding . description ĊĠĠĠĠĠĠĠ Ġval Ġplay Icon Ġ= Ġview Binding . play Icon ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġview Binding . title ĊĊĠĠĠĠĠĠĠ Ġvideo Thumbnail . load ( video . thumbnail ) ĊĠĠĠĠĠĠĠ Ġclick able Overlay . setOnClickListener Ġ{ ĠonClick . with Video ( video ) Ġ} ĊĠĠĠĠĠĠĠ Ġdescription . text Ġ= Ġvideo . description ĊĠĠĠĠĠĠĠ Ġplay Icon . setImage Resource ( R . drawable . ic _ play _ circle _ outline _ black _ 4 8 dp ) ĊĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġvideo . title ĊĊĠĠĠĠĠĠĠ Ġ// item View . setOnClickListener Ġ{ ĠonClick . with Video ( video ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom ( parent : ĠViewGroup , ĠonClick : ĠDev Byte Action . OnClick ): ĠDev Byte ViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġlayout Inflater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dev byte _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDev Byte ViewHolder ( view , ĠonClick ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠDev Byte Action Ġ{ ĊĠĠĠ Ġclass ĠOnClick ( private Ġval Ġaction : Ġ( Dev Byte Video ) Ġ-> ĠUnit ) Ġ: ĠDev Byte Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġwith Video ( video : ĠDev Byte Video ) Ġ= Ġaction ( video ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠDev Byte Diff Callback Ġ: ĠDiff Util . Item Callback < Dev Byte Video >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠDev Byte Video , Ġnew Item : ĠDev Byte Video ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item . url Ġ== Ġnew Item . url ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Diff Util Equals ") ĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠDev Byte Video , Ġnew Item : ĠDev Byte Video ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ } Ċ