package Ġcom . flex so . flex same . ui . company Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroid . widget . Filter Ċ import Ġandroid . widget . Filter able Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . flex so . flex same . MainActivity Ċ import Ġcom . flex so . flex same . R Ċ import Ġcom . flex so . flex same . databinding . Off ic elist Item Binding Ċ import Ġcom . flex so . flex same . models . Office Ċ Ċ class ĠOffice ListAdapter ( val Ġcontext : ĠContext , Ġval Ġcompany ViewModel : ĠCompany ViewModel ) Ġ: ĠList Adapter < Office , ĠOffice ListAdapter . ViewHolder >( Office List Diff CallBack ()), ĠFilter able Ġ{ ĊĊĠĠĠ Ġvar Ġis CL ick able : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġvar Ġm List Ref : ĠList < Office >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġm Filter edList : ĠList < Office >? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewHolder . from ( parent ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠgetItem ( position ) ĊĠĠĠĠĠĠĠ Ġset Animations ( holder ) ĊĠĠĠĠĠĠĠ Ġholder . bind ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOffice ListItem Listener Ġ{ Ġoffice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . is CL ick able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ĠMainActivity ). find Nav Controller ( R . id . my Nav Host Fragment ). navigate ( Company Fragment Directions . action Company Fragment To Office Fragment ( office )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġitem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Animations ( holder : ĠViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= Ġholder . binding ĊĠĠĠĠĠĠĠ Ġval Ġanim Ġ= ĠAnimation Utils . load Animation ( context , ĠR . anim . slide _ in _ right ) ĊĠĠĠĠĠĠĠ Ġbinding . street House Number . animation Ġ= Ġanim ĊĠĠĠĠĠĠĠ Ġbinding . office Img . animation Ġ= Ġanim ĊĠĠĠĠĠĠĠ Ġbinding . postal Code City . animation Ġ= Ġanim ĊĠĠĠĠĠĠĠ Ġbinding . country . animation Ġ= Ġanim ĊĠĠĠĠĠĠĠ Ġbinding . card Container . animation Ġ= Ġanim ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Item ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġo : ĠOffice Ġ= Ġthis . current List . get ( position ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog : ĠAlertDialog Ġ= ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" delete Ġoffice : Ġ${ o . address . street }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . delete , ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompany ViewModel . remove Office ( o . office Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . cancel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Interface . OnClickListener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompany ViewModel . get Off ices () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Cancel Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompany ViewModel . get Off ices () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġclass ĠViewHolder Ġprivate Ġconstructor ( val Ġbinding : ĠOffic elist Item Binding ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( click Listener : ĠOffice ListItem Listener , Ġitem : ĠOffice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . office Ġ= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . click Listener Ġ= Ġclick Listener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . street House Number . text Ġ= Ġitem . street House Number String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . postal Code City . text Ġ= Ġitem . postal Code City () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . country . text Ġ= Ġitem . address . country ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . execute Pending Bindings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfrom ( parent : ĠViewGroup ): ĠViewHolder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠOffic elist Item Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠOffice List Diff CallBack Ġ: ĠDiff Util . Item Callback < Office >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( old Item : ĠOffice , Ġnew Item : ĠOffice ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item . office Id Ġ== Ġnew Item . office Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( old Item : ĠOffice , Ġnew Item : ĠOffice ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġold Item Ġ== Ġnew Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠOffice ListItem Listener ( val Ġclick Listener : Ġ( office : ĠOffice ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠonClick ( v : ĠView , Ġo : ĠOffice ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener ( o ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Filter (): ĠFilter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠFilter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Filtering ( char Sequence : ĠCharSequence ): ĠFilter Results Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar String Ġ= Ġchar Sequence . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char String . isEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Filter edList Ġ= Ġm List Ref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm List Ref ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter edList Ġ= Ġarray ListOf < Office >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġm List Ref !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char String . toLowerCase () Ġin Ġitem . filter String (). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter edList . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Filter edList Ġ= Ġfilter edList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfilter Results Ġ= ĠFilter Results () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Results . values Ġ= Ġm Filter edList ?. sorted By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . street House Number String () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfilter Results ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpublish Results ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Sequence : ĠCharSequence , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfilter Results : ĠFilter Results ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Filter edList Ġ= Ġfilter Results . values Ġas ĠList < Office >? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( m Filter edList ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }