package Ġcom . uts man . hi y ah iy ah i ya . ui . adapter Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . paging . Paged ListAdapter Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġcom . uts man . hi y ah iy ah i ya . R Ċ import Ġcom . uts man . hi y ah iy ah i ya . model . features . Photo Local Ċ import Ġcom . uts man . hi y ah iy ah i ya . model . features . Photo Type Ċ import Ġcom . uts man . hi y ah iy ah i ya . utils . click Ċ import Ġcom . uts man . hi y ah iy ah i ya . utils . log i Ċ import Ġkotlinx . android . synt hetic . main . item _ divider _ photo . view .* Ċ import Ġjava . io . File Ċ Ċ class ĠPh otos Paged Adapter Ġ: ĠP aged ListAdapter < Photo Local , ĠRecyclerView . ViewHolder >( diff Callback ) Ġ{ ĊĊĠĠĠ Ġinner Ġclass ĠPhoto ViewHolder ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( photo Local : ĠPhoto Local ) Ġ= ĠitemView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Photo Ġ= ĠfindViewById < ImageView >( R . id . img _ photo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( photo Local . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . get (). load ( file ). resize ( 3 0 0 , Ġ 0 ). into ( img Photo ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Photo Click ?. invoke ( photo Local ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠPhoto Divider ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġbind ( photo Local : ĠPhoto Local ) Ġ= ĠitemView . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx _ divider _ date . text Ġ= Ġphoto Local . divider String ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdiff Callback Ġ= Ġobject Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Util . Item Callback < Photo Local >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Con cert : ĠPhoto Local , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Con cert : ĠPhoto Local ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ= Ġold Con cert . date Ġ== Ġnew Con cert . date ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Con cert : ĠPhoto Local , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Con cert : ĠPhoto Local ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ= Ġold Con cert Ġ== Ġnew Con cert ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġon Photo Click : Ġ(( Photo Local ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun ĠonClick ( on Photo Click : Ġ(( Photo Local ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Photo Click Ġ= Ġon Photo Click ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmain Layout : ĠInt Ġ= ĠR . layout . item _ photo _ 1 ĊĊĠĠĠ Ġfun Ġset Layout (@ Layout Res Ġlayout Res : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . main Layout Ġ= Ġlayout Res ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( Photo Type . values ()[ view Type ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto Type . ITEM Ġ-> ĠPhoto ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( main Layout , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main Layout Ġ== ĠR . layout . item _ photo _ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . item _ photo _ 1 , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto Divider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . item _ divider _ photo , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= ĠgetItem ( position )?. photo Type ?. ordinal Ġ?: Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getItem ( position ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( getItem ( position )?. photo Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto Type . ITEM Ġ-> Ġ( holder Ġas ĠPhoto ViewHolder ). bind ( getItem ( position ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main Layout Ġ== ĠR . layout . item _ photo _ 1 ) Ġ( holder Ġas ĠPhoto ViewHolder ). bind ( getItem ( position ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ( holder Ġas ĠPhoto Divider ). bind ( getItem ( position ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfix Grid Span () Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog i (" view Ġtype Ġ--> Ġ${ getItem ViewType ( position )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( getItem ViewType ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto Type . ITEM . ordinal Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto Type . DI VIDER . ordinal Ġ-> Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }