package Ġio . github . wy kop mob il ny . base . adapter Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġio . github . wy kop mob il ny . databinding . Progress Item Binding Ċ import Ġio . github . wy kop mob il ny . utils . layout Inflater Ċ Ċ abstract Ġclass ĠAdvanced Progress Adapter < A Ġ: ĠAny > Ġ: ĊĠĠĠ ĠRecyclerView . Adapter < RecyclerView . ViewHolder >(), ĠBase Progress Adapter < A > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVIEW TYPE _ PROGRESS Ġ= Ġ 0 Ġ// ĠFor Ġany Ġother Ġview type Ġuse Ġvalue Ġgreater Ġthan Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġdataset Ġ= Ġarray ListOf < A ?> () ĊĊĠĠĠ Ġoverride Ġval Ġdata : ĠList < A > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdataset . filter NotNull () ĊĊĠĠĠ Ġabstract Ġfun Ġcreate ViewHolder ( view Type : ĠInt , Ġparent : ĠViewGroup ): ĠRecyclerView . ViewHolder ĊĊĠĠĠ Ġabstract Ġfun Ġbind Holder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġdataset [ position ]?. hashCode ()?. to Long () Ġ?: Ġposition . to Long () ĊĊĠĠĠ Ġoverride Ġfun Ġdisable Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dataset . isNotEmpty () Ġ&& Ġdataset . last () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġdataset . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . remove At ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Removed ( size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Data ( items : ĠList < A >, Ġshould Clear Adapter : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Clear Adapter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( items ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Items Ġ= Ġitems . filter Ġ{ Ġ! dataset . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dataset . last () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . remove At ( dataset . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . addAll ( filtered Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . add ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Inserted ( dataset . size Ġ- Ġfiltered Items . size , Ġfiltered Items . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġdataset . size ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dataset [ position ] Ġ!= Ġnull ) Ġbind Holder ( holder , Ġposition ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( view Type Ġ== ĠEnd less Progress Adapter . ITEM _ PROGRESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProgress ViewHolder ( Progress Item Binding . inflate ( parent . layout Inflater , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate ViewHolder ( parent , Ġview Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠProgress ViewHolder ( val Ġbinding : ĠProgress Item Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ċ } Ċ