package Ġcom . flag beat . text pad Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . Filter Ċ import Ġandroid . widget . Filter able Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġkotlinx . android . synt hetic . main . row _ hash _ tag . view .* Ċ import Ġkotlinx . android . synt hetic . main . row _ people _ tag . view .* Ċ Ċ class ĠAuto Complete Adapter ( ĊĠĠĠ Ġcontext : ĠContext ?, ĊĠĠĠ Ġprivate Ġval Ġtags : ĠMutable List < Tag >, ĊĠĠĠ Ġprivate Ġval Ġlistener : Ġ( Tag ) Ġ-> ĠUnit Ċ ) Ġ: ĠArray Adapter < String >( context !! , Ġ 0 , Ġtags . map Ġ{ Ġit . label Ġ}), ĠFilter able Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Filter : ĠArray Filter ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtags . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( tags [ position ]. tag Type Ġ== ĠTag Type . PE OP LE ) Ġ( tags [ position ] Ġas ĠPeople Tag ). username !! Ġelse Ġtags [ position ]. label ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġfun Ġupdate ( new Tags : ĠList < Tag >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtags . clear () ĊĠĠĠĠĠĠĠ Ġtags . addAll ( new Tags ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget View ( position : ĠInt , ĠconvertView : ĠView ?, Ġparent : ĠViewGroup ): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġview Ġ= ĠconvertView ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags [ position ] Ġis ĠPeople Tag ) ĠR . layout . row _ people _ tag Ġelse ĠR . layout . row _ hash _ tag ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġan Ġexisting Ġview Ġis Ġbeing Ġreused , Ġotherwise Ġinf late Ġthe Ġview ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġ== Ġnull Ġ|| Ġview . tag Ġ!= Ġtags [ position ]. tag Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= ĠLayoutInflater . from ( context ). inflate ( layout , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. tag Ġ= Ġtags [ position ]. tag Type ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tags [ position ] Ġis ĠPeople Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( tags [ position ] Ġas ĠPeople Tag , Ġview !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind ( tags [ position ] Ġas ĠHash Tag , Ġview !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠLookup Ġview Ġfor Ġdata Ġpopulation Ċ // ĠĠĠĠĠĠĠ ĠTextView Ġtv Name Ġ= Ġ( TextView ) ĠconvertView . findViewById ( R . id . tv Name ); Ċ // ĠĠĠĠĠĠĠ ĠTextView Ġtv Home Ġ= Ġ( TextView ) ĠconvertView . findViewById ( R . id . tv Home ); Ċ // ĠĠĠĠĠĠĠ Ġ// ĠPopulate Ġthe Ġdata Ġinto Ġthe Ġtemplate Ġview Ġusing Ġthe Ġdata Ġobject Ċ // ĠĠĠĠĠĠĠ Ġtv Name . setText ( user . name ); Ċ // ĠĠĠĠĠĠĠ Ġtv Home . setText ( user . home town ); ĊĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe Ġcompleted Ġview Ġto Ġrender Ġon Ġscreen ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind ( item : ĠHash Tag , ĠitemView : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . tag _ name . text Ġ= Ġitem . label ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbind ( people Tag : ĠPeople Tag , ĠitemView : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . name . text Ġ= Ġpeople Tag . label ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( people Tag . username )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . username . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . username . text Ġ= Ġpeople Tag . username ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . username . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( people Tag . icon Url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPic asso . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( people Tag . icon Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . avatar _ big ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. error ( R . drawable . avatar _ big ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( item View . avatar ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠitemView . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ( people Tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Filter (): ĠFilter Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Filter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Filter Ġ= ĠArray Filter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm Filter !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġtags . clear () ĊĠĠĠĠĠĠĠ Ġsuper . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠArray Filter Ġ: ĠFilter () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Filtering ( prefix : ĠCharSequence ?): ĠFilter Results Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠFilter Results () Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Original Values Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock !! ) Ġ{ Ġm Original Values Ġ= ĠArrayList ( full List ) Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefix Ġ== Ġnull Ġ|| Ġprefix . length Ġ== Ġ 0 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( lock !! ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList ( m Original Values ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . values Ġ= Ġlist Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . count Ġ= Ġlist . size Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix String Ġ= Ġprefix . toString (). toLowerCase () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġm Original Values Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġvalues !!. size Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Values Ġ= ĠArrayList < String >( count ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġvalues [ i ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . toLowerCase (). contains ( prefix String )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Values . add ( item ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . values Ġ= Ġnew Values Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . count Ġ= Ġnew Values . size Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(( prefix ?. startsWith ("@ ") Ġ== Ġtrue Ġ&& Ġtags [ 0 ]. tag Type Ġ== ĠTag Type . PE OP LE ) Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( prefix ?. startsWith ("# ") Ġ== Ġtrue Ġ&& Ġtags [ 0 ]. tag Type Ġ== ĠTag Type . HASH ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . values Ġ= Ġtags . map Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . count Ġ= Ġtags . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpublish Results ( constraint : ĠCharSequence ?, Ġresults : ĠFilter Results ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfull List Ġ= Ġif Ġ( results . values Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . values Ġas ĠArrayList < Tag > Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArrayList () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results . count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Invalid ated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }