package Ġcom . nik ia lek sey . inter view . image search . search Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . paging . Paged ListAdapter Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġcom . nik ia lek sey . inter view . image search . images . Image Ċ import Ġcom . nik ia lek sey . inter view . image search . images . Progress State Ċ import Ġcom . nik ia lek sey . inter view . image search . search . impl . R Ċ import Ġcom . nik ia lek sey . inter view . image search . search . impl . databinding . Item Loading Binding Ċ import Ġcom . nik ia lek sey . inter view . image search . search . impl . databinding . Item Search Binding Ċ import Ġjava . lang . IllegalArgumentException Ċ Ċ class ĠImages Adapter ( ĊĠĠĠ Ġprivate Ġval Ġg lide : ĠRequest Manager , ĊĠĠĠ Ġprivate Ġval Ġimage ClickListener : Ġ( image : ĠImage , Ġshared : ĠView ) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġretry Listener : Ġ() Ġ-> ĠUnit Ċ ) Ġ: ĠP aged ListAdapter < Image , ĠRecyclerView . ViewHolder >( ĊĠĠĠ Ġobject Ġ: ĠDiff Util . Item Callback < Image >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Image : ĠImage , Ġnew Image : ĠImage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Image . thumbnail Url () Ġ== Ġnew Image . thumbnail Url () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Image : ĠImage , Ġnew Image : ĠImage ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Image . equals ( new Image ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġloading State : ĠProgress State ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== ĠR . layout . item _ search ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Search Binding . inflate ( in flater , Ġparent , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Image ClickListener ( image ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view Type Ġ== ĠR . layout . item _ loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoading ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Loading Binding . inflate ( in flater , Ġparent , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Unexpected Ġview Ġtype : Ġ$ view Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getItem ViewType ( position ) Ġ== ĠR . layout . item _ search ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠImage ViewHolder ). bind ( image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠImage ViewHolder ). clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( getItem ViewType ( position ) Ġ== ĠR . layout . item _ loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( holder Ġas ĠLoading ViewHolder ). bind ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ== Ġitem Count Ġ- Ġ 1 Ġ&& Ġhas Loading ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ loading ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . item _ search ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Count Ġ= Ġsuper . getItem Count () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( has Loading ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Count Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Loading State ( loading State : ĠProgress State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprevious State Ġ= Ġthis . loading State ĊĠĠĠĠĠĠĠ Ġval Ġhad Extra Row Ġ= Ġhas Loading () ĊĠĠĠĠĠĠĠ Ġthis . loading State Ġ= Ġloading State ĊĠĠĠĠĠĠĠ Ġval Ġhas Extra Row Ġ= Ġhas Loading () ĊĠĠĠĠĠĠĠ Ġif Ġ( had Extra Row Ġ!= Ġhas Extra Row ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( had Extra Row ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( super . getItem Count ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Inserted ( super . getItem Count ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( has Extra Row Ġ&& Ġprevious State Ġ!= Ġloading State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( item Count Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Loading (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġloading State Ġ!= Ġnull Ġ&& Ġloading State ?. is Success () Ġ!= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠImage ViewHolder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbinding : ĠItem Search Binding , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġimage ClickListener : ĠView Image ClickListener ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( image : ĠImage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage ClickListener . image Ġ= Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener ( image ClickListener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġg lide ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( image . thumbnail Url ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . search Item Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Item Image . transition Name Ġ= Ġimage . thumbnail Url () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Item Image . setImage Drawable ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLoading ViewHolder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbinding : ĠItem Loading Binding , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Retry : Ġ() Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Retry . setOnClickListener Ġ{ Ġon Retry () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( loading State : ĠProgress State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Progress . isVisible Ġ= Ġloading State . is InProgress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Message . isVisible Ġ= Ġloading State . is Failed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Retry . isVisible Ġ= Ġloading State . is Failed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Message . text Ġ= Ġloading State . message ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠView Image ClickListener ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġimage ClickListener : Ġ( image : ĠImage , Ġshared : ĠView ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ: ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġimage : ĠImage ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage ?. let Ġ{ Ġimage ClickListener ( it , Ġview ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }