package Ġcom . pk j . learn . ass hop ping . products Ċ Ċ 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 Ġcom . bump tech . glide . G lide Ċ import Ġcom . pk j . learn . ass hop ping . R Ċ import Ġcom . pk j . learn . ass hop ping . data . Product Ċ import Ġkotlinx . android . synt hetic . main . layout _ product . view .* Ċ Ċ /** Ċ Ġ* Ġ@ author ĠP ank aj ĠJ ang id Ċ Ġ*/ Ċ class ĠProducts Adapter ( private Ġval ĠviewModel : ĠProducts ViewModel ) Ġ: ĠList Adapter < Product , ĠProduct ViewHolder >( Product Item Diff Callback ()) Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠProduct ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠProduct ViewHolder ( LayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . layout _ product , Ġparent , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠProduct ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind To ( viewModel , ĠgetItem ( position )) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠProduct ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĠĠĠ Ġfun Ġbind To ( viewModel : ĠProducts ViewModel , Ġproduct : ĠProduct ){ ĊĠĠĠĠĠĠĠ ĠG lide . with ( item View . context ). load ( product . image ). into ( item View . image ) ĊĠĠĠĠĠĠĠ ĠitemView . name . text Ġ= Ġproduct . name ; ĊĠĠĠĠĠĠĠ ĠitemView . price . text Ġ= Ġproduct . price Label ĊĠĠĠĠĠĠĠ Ġupdate Like ( product . is Lik ed ) ĊĠĠĠĠĠĠĠ Ġupdate Offline ( product . is Offline ) ĊĠĠĠĠĠĠĠ ĠitemView . like . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . like Product ( product ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Like (! product . is Lik ed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . offline . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . offline Product ( product ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Offline (! product . is Offline ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . open Product ( product . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Like ( is Like : ĠBoolean ){ ĊĠĠĠĠĠĠĠ ĠitemView . like . setImage Resource ( if Ġ( is Like ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ favorite _ 2 4 px ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ favorite _ border _ 2 4 px ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Offline ( is Offline : ĠBoolean ){ ĊĠĠĠĠĠĠĠ ĠitemView . offline . setImage Resource ( if ( is Offline ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ cloud _ done _ black _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ cloud _ download _ black _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠProduct Item Diff Callback Ġ: ĠDiff Util . Item Callback < Product >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠProduct , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠProduct ): ĠBoolean Ġ= Ġold Item . id Ġ== Ġnew Item . id ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠProduct , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠProduct ): ĠBoolean Ġ= Ġold Item Ġ== Ġnew Item Ċ Ċ }