package Ġlive . h ms . app 2 . ui . meeting . act ives peaker Ċ Ċ import Ġlive . h ms . video . utils . H MS Logger Ċ import Ġjava . util . concurrent . Concurrent Linked Queue Ċ Ċ class ĠActive Speaker Cache < T >( val Ġcapacity : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠActive Speaker Cache :: class . java . simple Name ĊĠĠĠ Ġprivate Ġval Ġspeak ers Ġ= ĠConcurrent Linked Queue < T >() ĊĊĠĠĠ Ġfun Ġupdate ( items : ĠList < T >, ĠisActive Speaker Update : ĠBoolean ): ĠUnit Ġ= Ġsynchronized ( speak ers ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThese Ġare Ġall Ġthe Ġitems Ġthat Ġshould Ġbe Ġin Ġhere . ĊĠĠĠĠĠĠĠ Ġif Ġ( isActive Speaker Update ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Temp Ġ= Ġspeak ers ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" Prev :$ prev Temp ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġ( items . take ( capacity ) Ġunion Ġspeak ers ). take ( capacity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" New Ġ: $ update ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeak ers . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeak ers . addAll ( update ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev Temp Ġ!= Ġupdate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" List Ġchanged : ĠPre v :$ prev Temp \ n New Ġ: $ update ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" -------- run Ġfinished --------- ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" Only Ġremoving Ġtracks , Ġtrack Ġupdate .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirst Ġremove Ġany Ġtracks Ġthat Ġhave Ġgotten Ġremoved . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ĠWhich Ġare Ġthe Ġtracks Ġpresent Ġin Ġspeak ers Ġbut Ġnot Ġin Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" Current Ġ$ items ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexclude Removed Tracks Ġ= Ġspeak ers . intersect ( items ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" New Ġ$ exclude Removed Tracks ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġfill Ġitems , Ġnot Ġremove Ġany Ġfurther Ġitems . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= Ġ( exclude Removed Tracks Ġunion Ġitems . take ( capacity )). take ( capacity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH MS Logger . v ( TAG , Ġ" After Ġfilling Ġ$ update ,\ n with Ġavailable Ġoptions Ġ$ items ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeak ers . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspeak ers . addAll ( update ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Items (): ĠList < T > Ġ= Ġsynchronized ( speak ers ) Ġ{ Ġspeak ers . toList () Ġ} Ċ Ċ }