package Ġpl . pat ry k . my hair d ress er . ui . admin Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . section _ layout . view .* Ċ import Ġpl . pat ry k . my hair d ress er . R Ċ import Ġpl . pat ry k . my hair d ress er . data . model . Appointment Ċ import Ġpl . pat ry k . my hair d ress er . data . model . Appointment Section Ċ import Ġpl . pat ry k . my hair d ress er . utils . PopupMenu Listener ĊĊ Ċ class ĠSection Adapter Ġ: ĠList Adapter < Appointment Section , ĠSection Adapter . ViewHolder >( diff Callback ) Ġ{ ĊĊĠĠĠ Ġ// ĠUse Ġto Ġoptimize Ġnested Ġre cycler Ġviews ĊĠĠĠ Ġprivate Ġval Ġview Pool Ġ= ĠRecyclerView . Re cyc led View Pool () ĊĊĠĠĠ Ġ// ĠListener Ġfor Ġbuttons Ġclick Ġevents ĊĠĠĠ Ġvar Ġlistener : ĠPopup Menu Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġitem Context Ġ= ĠitemView . context ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġappointment Adapter Ġ= ĠAppointment Adapter () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġheader Ġ= ĠitemView . header ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġre cyclerView Ġ= ĠitemView . section _ recycler _ view ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( section : ĠAppointment Section ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDec ide Ġif Ġwe Ġwant Ġto Ġshow Ġsection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhether Ġits Ġempty Ġor Ġnot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Or Hide Section ( section ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġshow Or Hide Section ( section : ĠAppointment Section ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġwe Ġhave Ġany Ġdata Ġto Ġpopulate Ġviews ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( section . section Data . isNull OrEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup Ġviews Ġif Ġwe Ġany Ġsection Ġto Ġshow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġsection Ġheader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Section Title ( section ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup Ġre cycler Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Recycler For Section () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSetup ĠonClick Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Adapter . popup Menu Listener Ġ= Ġlistener ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSubmit Ġsection Ġdata Ġto Ġshow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappointment Adapter . submit List ( section . section Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsetup Recycler For Section () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( re cyclerView . context , ĠRecyclerView . HORIZONTAL , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġappointment Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Re cyc led View Pool ( view Pool ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġset Section Title ( section : ĠAppointment Section ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( section . section Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppointment . VER IFICATION _ STATE _ PENDING Ġ-> Ġheader . text Ġ= Ġitem Context . getString ( R . string . section _ header _ pending ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppointment . VER IFICATION _ STATE _ APPRO VED Ġ-> Ġheader . text Ġ= Ġitem Context . getString ( R . string . section _ header _ approved ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAppointment . VER IFICATION _ STATE _ RE JECT ED Ġ-> Ġheader . text Ġ= Ġitem Context . getString ( R . string . section _ header _ rejected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠSection Adapter . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠLayoutInflater . from ( parent . context ). inflate ( R . layout . section _ layout , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( item View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠSection Adapter . ViewHolder , Ġposition : ĠInt ) Ġ= Ġholder . bind ( getItem ( position )) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdiff Callback : ĠDiff Util . Item Callback < Appointment Section > Ġ= Ġobject Ġ: ĠDiff Util . Item Callback < Appointment Section >() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠAppointment Section , Ġnew Item : ĠAppointment Section ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . section Type Ġ== Ġnew Item . section Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠAppointment Section , Ġnew Item : ĠAppointment Section ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . section Type Ġ== Ġnew Item . section Type Ġ&& Ġold Item . section Data Ġ== Ġnew Item . section Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }