package Ġcom . work fort . pst ui an . app . ui . check in . adapter Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Filter Ċ import Ġandroid . widget . Filter able Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . work fort . pst ui an . R Ċ import Ġcom . work fort . pst ui an . app . data . local . check in . Check In Entity Ċ import Ġcom . work fort . pst ui an . app . ui . check in . view holder . Check In ViewHolder Ċ import Ġcom . work fort . pst ui an . app . ui . check in . view holder . Default Check In ViewHolder Ċ import Ġcom . work fort . pst ui an . databinding . Row Check In User Binding Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* Ġ Ġ************************************************************************* *** Ċ Ġ* Ġ Ġ* ĠCreated Ġby Ġ: Ġar han Ġon Ġ 1 3 ĠDec , Ġ 2 0 2 1 Ġat Ġ 1 3 : 0 4 . Ċ Ġ* Ġ Ġ* ĠEmail Ġ: Ġas h ik . p stu . c se @ gmail . com Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠThis Ġclass Ġis Ġfor : Ċ Ġ* Ġ Ġ* Ġ 1 . Ċ Ġ* Ġ Ġ* Ġ 2 . Ċ Ġ* Ġ Ġ* Ġ 3 . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLast Ġedited Ġby Ġ: Ġar han Ġon Ġ 2 0 2 1 / 1 2 / 1 3 . Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLast ĠReview ed Ġby Ġ: Ġ< Reviewer ĠName > Ġon Ġ< mm / dd / yy > Ċ Ġ* Ġ Ġ************************************************************************* *** Ċ Ġ*/ Ċ Ċ class ĠCheck In Adapter ( ĊĠĠĠ Ġprivate Ġval ĠonCreate New Ġ: Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġprivate Ġval ĠonClick Item Ġ: Ġ( item : ĠCheck In Entity ) Ġ-> ĠUnit Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >(), ĠFilter able Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSetting Ġextra View Count Ġto Ġtrue Ġwill Ġadd Ġa Ġdefault Ġview Ġat Ġthe Ġstart Ġof Ġthe Ġlist ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġhas Default View Ġ= Ġfalse ĊĠĠĠ Ġobject ĠView Type Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDefault Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCheck In Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdata Ġ: ĠMutable List < Check In Entity > Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġval Ġfiltered Data Ġ: ĠMutable List < Check In Entity > Ġ= ĠArrayList () ĊĊĠĠĠ Ġ@ Suppress Lint (" Notify DataSet Changed ") ĊĠĠĠ Ġfun ĠsetData ( data : ĠMutable List < Check In Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . data . clear () ĊĠĠĠĠĠĠĠ Ġthis . data . addAll ( data ) ĊĠĠĠĠĠĠĠ Ġfilter Data ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Data ( data : ĠMutable List < Check In Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( data . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= Ġif ( this . data . isEmpty ()) Ġdata Ġelse Ġdata . toSet (). minus ( this . data . toSet ()) ĊĠĠĠĠĠĠĠ Ġif ( new Data . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval ĠstartPosition Ġ= Ġthis . data . size ĊĠĠĠĠĠĠĠ Ġthis . data . addAll ( new Data ) ĊĠĠĠĠĠĠĠ Ġthis . filtered Data . addAll ( new Data ) ĊĊĠĠĠĠĠĠĠ Ġval ĠnewData Count Ġ= ĠnewData . size ĊĠĠĠĠĠĠĠ Ġif ( new Data Count Ġ== Ġ 1 ) Ġnotify Item Inserted ( start Position ) ĊĠĠĠĠĠĠĠ Ġelse Ġnotify Item Range Inserted ( start Position , ĠnewData Count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Notify DataSet Changed ") ĊĠĠĠ Ġfun Ġfilter Data ( data : ĠMutable List < Check In Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġnew Ġdata Ġis Ġsame Ġas Ġcurrent Ġdata Ġno Ġneed Ġto Ġdo Ġanything ĊĠĠĠĠĠĠĠ Ġif ( data . size Ġ<= Ġfiltered Data . size Ġ&& Ġfiltered Data . toSet (). minus ( data . toSet ()). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfiltered Data . clear () ĊĠĠĠĠĠĠĠ Ġfiltered Data . addAll ( data ) ĊĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstartPosition Ġ= Ġif ( has Default View ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġremoved ItemCount Ġ= Ġfiltered Data . size ĊĠĠĠĠĠĠĠ Ġthis . data . clear () ĊĠĠĠĠĠĠĠ Ġthis . filtered Data . clear () ĊĠĠĠĠĠĠĠ Ġnotify Item Range Removed ( start Position , Ġremoved ItemCount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġfiltered Data . size . plus ( if ( has Default View ) Ġ 1 Ġelse Ġ 0 ) ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( has Default View Ġ&& Ġposition Ġ== Ġ 0 ) ĠView Type . Default Ġelse ĠView Type . Check In ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Type . Default Ġ-> ĠDefault Check In ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRow Check In User Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCheck In ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRow Check In User Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDefault Check In ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( onCreate New ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCheck In ViewHolder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Position Ġ= Ġposition . minus ( if ( has Default View ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . animation Ġ= ĠAnimation Utils . load Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . context , ĠR . anim . anim _ item _ insert ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( filtered Data [ real Position ], ĠonClick Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Filter (): ĠFilter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject : ĠFilter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Filtering ( query : ĠCharSequence ?): ĠFilter Results Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠArrayList < Check In Entity > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( TextUtils . isEmpty ( query )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġq Ġ= Ġquery . toString (). lowercase ( Locale . ROOT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . name . lowercase ( Locale . ROOT ). contains ( q ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( it . batch ). lowercase ( Locale . ROOT ). contains ( q )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Result Ġ= ĠFilter Results () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Result . count Ġ= Ġresult . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Result . values Ġ= Ġresult ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfiltered Result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpublish Results ( query : ĠCharSequence ?, Ġfiltered Result : ĠFilter Results ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= Ġfiltered Result ?. values Ġas ĠArrayList < Check In Entity > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Data ( new Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }