/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 5 - 2 0 1 8 , ĠV ir gil ĠSecurity , ĠInc . Ċ Ġ* Ċ Ġ* ĠLead ĠMaint ainer : ĠV ir gil ĠSecurity ĠInc . Ġ< support @ vir gil security . com > Ċ Ġ* Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ( 1 ) ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ( 2 ) ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ( 3 ) ĠNeither Ġthe Ġname Ġof Ġvir gil Ġnor Ġthe Ġnames Ġof Ġits Ċ Ġ* ĠĠĠĠ Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ċ Ġ* ĠĠĠĠ Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE Ċ Ġ* ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL Ċ Ġ* ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER Ċ Ġ* ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , Ċ Ġ* ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ Ċ package Ġcom . android . vir gil security . tw ili ode mo . ui . chat . channels List Ċ Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . android . vir gil security . tw ili ode mo . R Ċ import Ġcom . android . vir gil security . tw ili ode mo . data . local . User Manager Ċ import Ġcom . android . vir gil security . tw ili ode mo . util . Constants Ċ import Ġcom . tw ilio . chat . Channel Ċ import Ġkotlinx . android . extensions . Layout Container Ċ import Ġkotlinx . android . synt hetic . main . item _ list _ channels .* Ċ Ċ /** Ċ Ġ* Ġ. Ġ_ Ġ Ġ_ Ċ Ġ* Ġ. | Ġ|| Ġ| Ġ_ Ċ Ġ* Ġ- | Ġ|| Ġ|| Ġ| ĠĠ ĠCreated Ġby : Ċ Ġ* Ġ. | Ġ|| Ġ|| Ġ|- Ġ ĠD any lo ĠO li iny k Ċ Ġ* Ġ.. \_ Ġ Ġ|| Ġ| ĠĠ Ġon Ċ Ġ* Ġ.... | Ġ Ġ_ / ĠĠĠĠ 6 / 0 1 / 1 8 Ċ Ġ* Ġ... -| Ġ| Ġ\ ĠĠĠ Ġat ĠV ir gil ĠSecurity Ċ Ġ* Ġ.... | _ |- Ċ Ġ*/ Ċ Ċ class ĠChannels List RV Adapter Ġconstructor ( private Ġval Ġuser Manager : ĠUser Manager ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < Channels List RV Adapter . Channel Holder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġitems : ĠMutable List < Channel > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclick Listener : Ġ( Int , ĠChannel ) Ġ-> ĠUnit ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠChannel Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . item _ list _ channels , Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠChannel Holder ( view , Ġclick Listener , Ġuser Manager ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠChannel Holder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder . bind ( items [ position ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () = Ġitems . size ĊĊĠĠĠ Ġfun Ġset Items ( items : ĠMutable List < Channel > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( items Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . removeAll ( this . items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . items Ġ= ĠArrayList ( items ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . items Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Items ( channels : ĠList < Channel >) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . addAll ( channels ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Item ( channel : ĠChannel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . add ( channel ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset ClickListener ( click Listener : Ġ( Int , ĠChannel ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . click Listener Ġ= Ġclick Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetItem ById ( inter loc utor : ĠString ): ĠChannel ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( channel Ġin Ġitems ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( channel . attributes [ Constants . KEY _ RECE IVER ] Ġas ĠString ) Ġ== Ġinter loc utor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchannel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Items () Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠChannel Holder ( override Ġval Ġcontainer View : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġon Item Clicked : Ġ( Int , ĠChannel ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Manager : ĠUser Manager ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( container View ), ĠLayout Container Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( channel : ĠChannel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġchannel . attributes ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreceiver Ġ= Ġattributes [ Constants . KEY _ RECE IVER ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġattributes [ Constants . KEY _ SEND ER ] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġuser Manager . getCurrent User () !!. identity ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentUser Ġ== Ġsender ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Username . text Ġ= Ġreceiver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Username . text Ġ= Ġsender ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrl Item Root . setOnClickListener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Item Clicked ( adapter Position , Ġchannel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ