package Ġcom . mig fer lab . just p izza . features . p izza . list Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . get Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . google . firebase . storage . k tx . storage Ċ import Ġcom . mig fer lab . just p izza . R Ċ import Ġcom . mig fer lab . just p izza . databinding . P izza ListItem Binding Ċ import Ġcom . mig fer lab . just p izza . features . p izza . list . P izza Recipe ListView State . P izza ListItem Ċ Ċ class ĠP izza Recipe ListAdapter ( ĊĠĠĠ Ġprivate Ġval Ġon ItemClickListener : Ġ( P izza ListItem ) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġon Item Fav ClickListener : Ġ( P izza ListItem ) Ġ-> ĠUnit Ċ ) Ġ: ĠList Adapter < P izza ListItem , ĠP izza Recipe ListAdapter . Item ViewHolder >( ĊĠĠĠ ĠP izza Diff Callback () Ċ ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠItem ViewHolder Ġ= ĊĠĠĠĠĠĠĠ ĠP izza ListItem Binding . inflate ( LayoutInflater . from ( parent . context ), Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run Ġ{ ĠItem ViewHolder ( this ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠItem ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠItem ViewHolder ( private Ġval Ġbinding : ĠP izza ListItem Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( p izza : ĠP izza ListItem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( p izza ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . p izza ListItem Name . text Ġ= Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfav Image Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fav ) ĠR . drawable . ic _ filled _ fav _ 2 4 Ġelse ĠR . drawable . ic _ empty _ fav _ 2 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . p izza ListItem Favorite Button . setImage Resource ( fav Image Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . p izza Recipe Item Card . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( binding . root . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( Firebase . storage . getReference From Url ( imageUrl )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . p izza ListItem Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . p izza ListItem Favorite Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Fav ClickListener ( p izza ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpizza . tags . forEach Indexed Ġ{ Ġindex , Ġtag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( binding . chip Group Tags [ index ] Ġas ĠCh ip ). text Ġ= Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠP izza Diff Callback Ġ: ĠDiff Util . Item Callback < P izza ListItem >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠP izza ListItem , Ġnew Item : ĠP izza ListItem ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . id Ġ== Ġnew Item . id ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠP izza ListItem , Ġnew Item : ĠP izza ListItem ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item Ġ== Ġnew Item ĊĠĠĠ Ġ} Ċ Ċ }