/* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠD am ian Ġvan Ġden ĠB erg . Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . dv db . material checklist . recycler . adapter Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . dv db . material checklist . recycler . adapter . listener . Checklist Item Adapter Drag Listener Ċ import Ġcom . dv db . material checklist . recycler . adapter . model . Checklist Item Adapter Config Ċ import Ġcom . dv db . material checklist . recycler . adapter . model . Checklist Item Adapter Request Focus Ċ import Ġcom . dv db . material checklist . recycler . base . adapter . Base Recycler Adapter Ċ import Ġcom . dv db . material checklist . recycler . base . holder . Base Recycler Holder Ċ import Ġcom . dv db . material checklist . recycler . base . holder . Base Recycler Holder Config Ċ import Ġcom . dv db . material checklist . recycler . base . model . Base Recycler Item Ċ import Ġcom . dv db . material checklist . recycler . checklist . holder . Checklist Recycler Holder Ċ import Ġcom . dv db . material checklist . recycler . checklist new . holder . Checklist New Recycler Holder Ċ import Ġcom . dv db . material checklist . recycler . util . Item Touch Helper Adapter Ċ import Ġcom . dv db . material checklist . recycler . util . holder . Drag gable Recycler Holder Ċ import Ġcom . dv db . material checklist . recycler . util . holder . Request Focus Recycler Holder Ċ Ċ internal Ġclass ĠChecklist Item Adapter ( ĊĠĠĠ Ġconfig : ĠChecklist Item Adapter Config , ĊĠĠĠ Ġprivate Ġval Ġitem Recycler Holder Factory : ĠChecklist Recycler Holder . Factory , ĊĠĠĠ Ġprivate Ġval Ġitem New Recycler Holder Factory : ĠChecklist New Recycler Holder . Factory , ĊĠĠĠ Ġprivate Ġval Ġitem Drag Listener : ĠChecklist Item Adapter Drag Listener , ĊĠĠĠ Ġitems : ĠList < Base Recycler Item > Ġ= Ġempty List () Ċ ) Ġ: ĠBase Recycler Adapter < Base Recycler Item , ĠBase Recycler Holder Config >( items ), ĊĠĠĠ ĠItem Touch Helper Adapter Ġ{ ĊĊĠĠĠ Ġvar Ġconfig : ĠChecklist Item Adapter Config Ġ= Ġconfig ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġrequest Focus : ĠChecklist Item Adapter Request Focus Ġ= ĊĠĠĠĠĠĠĠ ĠChecklist Item Adapter Request Focus ( RecyclerView . NO _ POSITION ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Changed ( value . position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Stable Ids ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ= Ġ_ items [ position ]. id ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ= Ġ_ items [ position ]. type . ordinal ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup , ĊĠĠĠĠĠĠĠ Ġview Type : ĠInt ĊĠĠĠ Ġ): ĠBase Recycler Holder < Base Recycler Item , ĠBase Recycler Holder Config > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Type Ġ= ĠBase Recycler Item . Type . from Int ( view Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Unknown Ġre cycler Ġitem Ġtype Ġfor Ġview Ġtype Ġ'$ view Type '") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Recycler Item . Type . CHECK LIST Ġ-> Ġitem Recycler Holder Factory . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . checklist Config ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Recycler Item . Type . CHECK LIST _ NEW Ġ-> Ġitem New Recycler Holder Factory . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . checklist New Config ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠBase Recycler Holder < Base Recycler Item , ĠBase Recycler Holder Config > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( ĊĠĠĠĠĠĠĠ Ġholder : ĠBase Recycler Holder < Base Recycler Item , ĠBase Recycler Holder Config >, ĊĠĠĠĠĠĠĠ Ġposition : ĠInt ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġ_ items [ position ] ĊĊĠĠĠĠĠĠĠ Ġholder . update Config Condition ally ( getConfig From ItemType ( item . type )) ĊĠĠĠĠĠĠĠ Ġholder . bind View ( item ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠRequest Focus Recycler Holder Ġ&& Ġposition Ġ== Ġrequest Focus . position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . request Focus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Focus . selection Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Focus . is Show Keyboard ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Move ( ĊĠĠĠĠĠĠĠ Ġfrom Position : ĠInt , ĊĠĠĠĠĠĠĠ Ġto Position : ĠInt ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitem Drag Listener . on Item Move ( from Position , Ġto Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcan Drag Over Target ( ĊĠĠĠĠĠĠĠ Ġcurrent : ĠRecyclerView . ViewHolder , ĊĠĠĠĠĠĠĠ Ġtarget : ĠRecyclerView . ViewHolder ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġitem Drag Listener . can Drag Over Target Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent . adapter Position , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget . adapter Position ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Drag Start ( view Holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Holder Ġis ĠDrag gable Recycler Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . on Drag Start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Drag Listener . on Item Drag Started ( view Holder . adapter Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Drag Stop ( view Holder : ĠRecyclerView . ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( view Holder Ġis ĠDrag gable Recycler Holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewHolder . on Drag Stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Drag Listener . on Item Drag Stopped ( view Holder . adapter Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetConfig From ItemType ( type : ĠBase Recycler Item . Type ): ĠBase Recycler Holder Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Recycler Item . Type . CHECK LIST Ġ-> Ġconfig . checklist Config ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Recycler Item . Type . CHECK LIST _ NEW Ġ-> Ġconfig . checklist New Config ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }