package Ġcom . ga ur av . f ret el lo . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . recyclerview . widget . Async List Differ Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ga ur av . f ret el lo . data . model . Session Ċ import Ġcom . ga ur av . f ret el lo . databinding . Item Session Layout Binding Ċ import Ġcom . ga ur av . f ret el lo . ui . sessions . Exercise Item Ċ import Ġcom . ga ur av . f ret el lo . ui . sessions . Sessions ViewModel Ċ import Ġcom . ga ur av . f ret el lo . utils . get Formatted DateTime Ċ import Ġcom . x wr ay . group ie . Group ie Adapter Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠRecyclerView ĠAdapter Ġto Ġhandle Ġdata Ġin ĠSession List Fragment Ċ Ġ*/ Ċ Ċ class ĠSession ListAdapter ( val Ġcontext : ĠFragment Activity , Ġprivate Ġval ĠviewModel : ĠS essions ViewModel ) Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < Session ListAdapter . Session ViewHolder >() Ġ{ ĊĊĠĠĠ Ġinner Ġclass ĠSession ViewHolder ( val Ġbinding : ĠItem Session Layout Binding ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( binding . root ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDiff Util Ġimplementation Ġfor Ġbetter Ġrendering Ġof ĠRecyclerView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġdiffer Callback Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Session >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠSession , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠSession ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . name Ġ== Ġnew Item . name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠSession , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠSession ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdiffer Ġ= ĠAsync List Differ ( this , Ġdiffer Callback ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRecyclerView ĠAdapter Ġcallback Ġmethods ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdiffer . current List . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠSession ViewHolder Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠItem Session Layout Binding . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), Ġparent , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSession ViewHolder ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠSession ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsession Ġ= Ġdiffer . current List [ position ] ĊĊĠĠĠĠĠĠĠ Ġholder . binding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Session Name . text Ġ= Ġ"${ session . name }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Pract iced On . text Ġ= Ġ" Last ĠPract iced Ġ: Ġ${ get Formatted DateTime ( session . pract iced On Date )}" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExercise Ġlist Ġimplementation Ġusing ĠGroup ie ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexercise ListAdapter Ġ= ĠGroup ie Adapter () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Ex ercises . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġexercise ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Ex ercises ( session . id ). observe ( context , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġexercise Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise ListAdapter . add ( Exercise Item ( exercise )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Show Ex ercises . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Show Ex ercises . text Ġ= Ġif Ġ( session . is Expanded ) Ġ" Hide Ġdetails " Ġelse Ġ" View Ġdetails " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġll Ex ercises . visibility Ġ= Ġif Ġ( session . is Expanded ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . is Expanded Ġ= Ġ! session . is Expanded ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClick Ġlistener Ġhandler Ġfor Ġlist Ġitems ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġprivate Ġvar Ġon ItemClickListener : Ġ(( Session ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġset On ItemClickListener ( listener : Ġ( Session ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġlistener ĊĠĠĠ Ġ} Ċ }