package Ġcom . qm . clean module . base . view Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Layout Res Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . qm . clean module . BR Ċ import Ġtim ber . log . Tim ber Ċ // MARK :- ĠBase Adapter @ Docs Ċ abstract Ġclass ĠBase Adapter < T Ġ: ĠBase Parcelable >( ĊĠĠĠ Ġprivate Ġval Ġitem Click : Ġ( T ) Ġ-> ĠUnit Ġ= Ġ{} Ċ ) Ġ: ĠList Adapter < T , ĠBase ViewHolder < T >>( Base Item Callback ()) Ġ{ ĊĊĠĠĠ Ġval ĠmCurrent List Ġ= Ġarray ListOf < T ?> () ĊĊĠĠĠ Ġprivate Ġvar Ġposition : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ@ Layout Res ĊĠĠĠ Ġabstract Ġfun Ġlayout Res (): ĠInt ĊĠĠĠ Ġabstract Ġfun Ġon ViewHolder Created ( view Holder : ĠBase ViewHolder < T >) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠBase ViewHolder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠData Binding Util . inflate < ViewData Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Res (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠBase ViewHolder < T >( binding ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon ViewHolder Created ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Base Adapter . position Ġ= Ġadapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Click ( getItem ( adapter Position )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠBase ViewHolder < T >, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( getItem ( position )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Item ( item : ĠT ?, Ġis List Empty : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e (" de leting Ġ> Ġ$ item Ġin Ġpos : Ġ$ position ") ĊĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent List . remove ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( m Current List . to Mutable List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis List Empty ( m Current List . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate List ( new List : ĠList < T >) Ġ{ ĊĠĠĠĠĠĠĠ ĠmCurrent List . addAll ( new List ) ĊĠĠĠĠĠĠĠ Ġsubmit List ( m Current List . to Mutable List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset List ( new List : ĠList < T ?> ) Ġ{ ĊĠĠĠĠĠĠĠ ĠmCurrent List . clear () ĊĠĠĠĠĠĠĠ ĠmCurrent List . addAll ( new List ) ĊĠĠĠĠĠĠĠ Ġsubmit List ( m Current List . to Mutable List ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Item ToList ( item : ĠT ?, Ġis Added : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent List . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( m Current List . to Mutable List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Added ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠTim ber . e (" item Ġis Ġnull ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġedit Item ( item : ĠT ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġitem ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmCurrent List [ position ] Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( m Current List . to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠTim ber . e (" item Ġis Ġnull ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Current List () Ġ{ ĊĠĠĠĠĠĠĠ ĠmCurrent List . clear () ĊĠĠĠĠĠĠĠ Ġsubmit List ( m Current List . to Mutable List ()) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠBase ViewHolder < T >( val Ġbinding : ĠView Data Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠ Ġfun Ġbind ( item : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . set Variable ( BR . item , Ġitem ) ĊĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠBase Item Callback < T Ġ: ĠBase Parcelable > Ġ: ĠDiff Util . Item Callback < T >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠT , Ġnew Item : ĠT ) Ġ= ĊĠĠĠĠĠĠĠ Ġold Item . unique (). toString () Ġ== Ġnew Item . unique (). toString () ĊĊĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠT , Ġnew Item : ĠT ) Ġ= ĊĠĠĠĠĠĠĠ Ġold Item . equals ( new Item ) Ċ } Ċ Ċ interface ĠBase Parcelable Ġ{ ĊĠĠĠ Ġfun Ġunique (): ĠAny Ċ } Ċ