/* Ċ Ġ* Ġ ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠC urity ĠAB Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġio . curity . ha ap ide mo . ui . settings . profile Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . curity . ha ap ide mo . R Ċ import Ġio . curity . ha ap ide mo . u ic omp onent s .* Ċ Ċ class ĠProfile Adapter ( ĊĠĠĠ Ġprivate Ġval Ġclick Handler : Ġ( Profile Item , ĠInt ) Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval Ġtoggle Handler : Ġ( Int ) Ġ-> ĠUnit Ċ ): ĠList Adapter < Profile Item , ĠRecyclerView . ViewHolder >( CONFIG _ COMP AR ATOR ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Item . Type . Header . ordinal Ġ-> ĠSettings Section ViewHolder . from ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Item . Type . Content . ordinal Ġ-> ĠText ViewHolder . from ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Item . Type . Toggle . ordinal Ġ-> ĠToggle ViewHolder . from ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Item . Type . Loading Action . ordinal Ġ-> ĠLoading Action ViewHolder . from ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Item . Type . Checkbox . ordinal Ġ-> ĠCheckbox ViewHolder . from ( parent , Ġleft Margin Ġ= Ġparent . context . resources . get Dimension ( R . dim en . padding ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Item . Type . Recycler . ordinal Ġ-> ĠRecyclerView Holder . from ( parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠClass CastException (" No Ġclass Ġfor Ġview Type Ġ$ view Type ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSettings Section ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Item Ġ= ĠgetItem ( position ) Ġas ĠProfile Item . Header ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( header Item . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠText ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Item Ġ= ĠgetItem ( position ) Ġas ĠProfile Item . Content ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġcontent Item . header , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġcontent Item . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġclick Handler ( content Item , Ġposition ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠToggle ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoggle Item Ġ= ĠgetItem ( position ) Ġas ĠProfile Item . Toggle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( toggle Item . label , Ġtoggle Item . is Toggle d ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Handler ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLoading Action ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloading Action Ġ= ĠgetItem ( position ) Ġas ĠProfile Item . Loading Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( loading Action . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Handler ( loading Action , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . set Loading ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCheckbox ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) Ġas ĠProfile Item . Checkbox ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġitem . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked Ġ= Ġitem . isChecked , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Clickable Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdid Toggle Ġ= Ġ Ġ{ Ġtoggle Handler ( position ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRecyclerView Holder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) Ġas ĠProfile Item . Recycler ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( item . adapter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetItem ( position ). type . ordinal ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCONFIG _ COMP AR ATOR Ġ= Ġobject : ĠDiff Util . Item Callback < Profile Item >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠProfile Item , Ġnew Item : ĠProfile Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠProfile Item , Ġnew Item : ĠProfile Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . id Ġ== Ġnew Item . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠProfile Item Ġ{ ĊĊĠĠĠ Ġenum Ġclass ĠType Ġ{ ĊĠĠĠĠĠĠĠ ĠHeader , ĊĠĠĠĠĠĠĠ ĠContent , ĊĠĠĠĠĠĠĠ ĠToggle , ĊĠĠĠĠĠĠĠ ĠLoading Action , ĊĠĠĠĠĠĠĠ ĠCheckbox , ĊĠĠĠĠĠĠĠ ĠRe cycler ĊĠĠĠ Ġ} ĊĠĠĠ Ġabstract Ġval Ġid : ĠLong ĊĠĠĠ Ġabstract Ġval Ġtype : ĠType ĊĊĠĠĠ Ġdata Ġclass ĠHeader ( val Ġtitle : ĠString ): ĠProfile Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid : ĠLong Ġ= Ġtitle . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType Ġ= ĠType . Header ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠContent ( val Ġheader : ĠString , Ġval Ġtext : ĠString ): ĠProfile Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid : ĠLong Ġ= Ġheader . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType Ġ= ĠType . Content ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠToggle ( val Ġlabel : ĠString , Ġval Ġis Toggle d : ĠBoolean ): ĠProfile Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid : ĠLong Ġ= Ġlabel . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType Ġ= ĠType . Toggle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠLoading Action ( val Ġtext : ĠString , Ġval Ġdate Long : ĠLong ): ĠProfile Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid : ĠLong Ġ= Ġtext . hashCode (). to Long () Ġ+ Ġdate Long ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType Ġ= ĠType . Loading Action ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠCheckbox ( val Ġtext : ĠString , Ġvar Ġis Checked : ĠBoolean ): ĠProfile Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid : ĠLong Ġ= Ġtext . hashCode (). to Long () Ġ+ Ġis Checked . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType Ġ= ĠType . Checkbox ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠRe cycler ( val Ġadapter : ĠList Adapter < Checkbox , ĠCheckbox ViewHolder >): ĠProfile Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġid : ĠLong Ġ= Ġadapter . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠType Ġ= ĠType . Recycler ĊĠĠĠ Ġ} Ċ }