package Ġcom . example . wh er eto eat . adapters Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Store Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . example . wh er eto eat . R Ċ import Ġcom . example . wh er eto eat . data . Dao ViewModel Ċ import Ġcom . example . wh er eto eat . models . Restaurant Ċ import Ġcom . example . wh er eto eat . repository . Restaurant Api Repository Ċ import Ġcom . example . wh er eto eat . ui . rest aurants . Restaurant ViewModel Ċ import Ġcom . example . wh er eto eat . ui . rest aurants . Restaurant ViewModel Factory Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ class ĠF avorites Adapter ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġval Ġdao ViewModel : ĠDao ViewModel Ċ ) Ġ: ĠRecyclerView . Adapter < F avorites Adapter . F avorites ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfav List Ġ= Ġempty List < Restaurant >() ĊĊĠĠĠ Ġinner Ġclass ĠF avorites ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage : ĠImageView Ġ= ĠitemView . findViewById ( R . id . imageView ) ĊĠĠĠĠĠĠĠ Ġval Ġr _ name : ĠTextView Ġ= ĠitemView . findViewById ( R . id . r _ name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOnly Ġ 1 x Ġcalled Ġwhen Ġyou Ġneed Ġa Ġnew ĠView ĊĠĠĠĠ Ġ* Ġ@ param Ġparent ĠViewGroup ĊĠĠĠĠ Ġ* Ġ@ param Ġview Type ĠInt ĊĠĠĠĠ Ġ* Ġ@ return ĠF avorites ViewHolder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠF avorites ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . list _ item _ fav , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Companion . context Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġreturn ĠF avorites ViewHolder ( item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠIt Ġis Ġcalled Ġby ĠRecyclerView Ġto Ġdisplay Ġthe Ġdata Ġat Ġthe Ġspecified Ġposition . ĊĠĠĠĠ Ġ* Ġ ĠThis Ġmethod Ġis Ġused Ġto Ġupdate Ġthe Ġcontents Ġof Ġthe ĠitemView ĊĠĠĠĠ Ġ* Ġ@ param Ġholder ĠF avorites ViewHolder ĊĠĠĠĠ Ġ* Ġ@ param Ġposition ĠInt ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠF avorites ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Item Ġ= Ġfav List [ position ] ĊĠĠĠĠĠĠĠ Ġholder . image . setImage Resource ( R . drawable . restaurant 4 ) ĊĠĠĠĠĠĠĠ Ġholder . r _ name . text Ġ= Ġcurrent Item . name ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTo Ġpass Ġrestaurant 's Ġdetails { name , address , city Ġetc ] Ġto ĠDetails ĠFragment ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġbundle Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġcurrent Item . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" address " Ġto Ġcurrent Item . address , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" city " Ġto Ġcurrent Item . city , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state " Ġto Ġcurrent Item . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" area " Ġto Ġcurrent Item . area , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" postal _ code " Ġto Ġcurrent Item . postal _ code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" country " Ġto Ġcurrent Item . country , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" price " Ġto Ġcurrent Item . price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lat " Ġto Ġcurrent Item . lat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" lng " Ġto Ġcurrent Item . lng , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" phone " Ġto Ġcurrent Item . phone , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" reserve _ url " Ġto Ġcurrent Item . reserve _ url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mobile _ reserve _ url " Ġto Ġcurrent Item . mobile _ reserve _ url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . find Nav Controller (). navigate ( R . id . nav _ details , Ġbundle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġfav List . size ĊĊĠĠĠ Ġfun ĠsetData ( fav : ĠList < Restaurant >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fav List Ġ= Ġfav ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠCor outine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfav List Rest Ġ= Ġempty List < Restaurant >() ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġrest ViewModel : ĠRest aurant ViewModel ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠDispatch ers . Main Ġ+ ĠJob () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġmethod Ġgave Ġthe ĠUser 's ĠF avorite 's Ġlist ĊĠĠĠĠĠĠĠĠ Ġ* ĠEvery Ġusers Ġhave Ġtheir Ġown ĠF avorite 's Ġlist ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġfav Rest Id ĠList < Long > ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Fav Rest List ById ( fav Rest Id : ĠList < Long >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfav Rest Mutable List : ĠMutable List < Restaurant > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= ĠRest aurant Api Repository () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewModel Factory Ġ= ĠRest aurant ViewModel Factory ( repository ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrest ViewModel Ġ= ĠViewModel Provider ( ViewModel Store (), ĠviewModel Factory ). get ( Restaurant ViewModel :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fav Rest Id . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġfav Rest Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Response Rest ById Ġ= Ġrest ViewModel . getF av Rest ById ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my Response Rest ById . is Successful Ġ&& Ġmy Response Rest ById . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresp one Body Ġ= Ġmy Response Rest ById . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( resp one Body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfav Rest Mutable List . add ( resp one Body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġload Ġfavor ites Ġbecause Ġof ĠAPI !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfav Rest Mutable List Ġ= Ġempty List < Restaurant >(). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfav List Rest Ġ= Ġfav Rest Mutable List . toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }