package Ġio . ag ora . education . class room . bean . group Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġio . ag ora . education . api . stream . data . E du Stream Info Ċ import Ġio . ag ora . education . api . user . data . E du UserInfo Ċ Ċ class ĠRoom Group Info () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGROUP STAT ES Ġ= Ġ" groups States " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠINTER ACT OUT GROUP S Ġ= Ġ" interact Out Groups " ĊĠĠĠĠĠĠĠ Ġval ĠINTER ACT OUT GROUP KEYS Ġ= ĠarrayOf (" g 1 ", Ġ" g 2 ") ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGROUP S Ġ= Ġ" groups " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠST UD ENTS Ġ= Ġ" students " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGROUP UUID Ġ= Ġ" group Uuid " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUSER UUID Ġ= Ġ" user Uuid " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* åĪĨ ç»Ħ çĬ¶æĢģ */ ĊĠĠĠ Ġvar Ġgroup States : ĠGroup State Info ? Ġ= Ġnull ĊĊĠĠĠ Ġ/* åıĤ ä¸İ ç»Ħ å¤ĸ äºĴ åĬ¨ çļĦ å°ı ç»Ħ id éĽĨåĲĪ */ ĊĠĠĠ Ġvar Ġinteract Out Groups : ĠMutable List < String >? Ġ= Ġnull ĊĊĠĠĠ Ġ/* åĪĨ ç»Ħ åĲİçļĦ åĲĦ å°ı ç»Ħ ä¿¡æģ¯ éĽĨåĲĪ */ ĊĠĠĠ Ġvar Ġgroups : ĠMutable List < Group Info >? Ġ= Ġnull ĊĊĠĠĠ Ġ/* çıŃ çº§ çļĦ åħ¨ ä½ĵ åŃ¦çĶŁ åĲį åįķ ( åĮħåĲ« åľ¨ çº¿ åĴĮ ä¸į åľ¨ çº¿ ) */ ĊĠĠĠ Ġvar Ġall Student : ĠMutable List < Group Member Info >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġupdate Interact Out Groups ( data : ĠMutable Map < String , ĠString > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinteract Out Groups Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ INTER ACT OUT GROUP KEYS [ 0 ]] ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteract Out Groups !!. add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ INTER ACT OUT GROUP KEYS [ 1 ]] ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteract Out Groups !!. add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinteract Out Groups Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Groups ( data : ĠMutable Map < String , ĠGroup Info > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroups Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterable Ġ= Ġdata . entries . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterable . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġiterable . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgroup Info Ġ= Ġelement . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Info . group Uuid Ġ= Ġelement . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroups !!. add ( group Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroups Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate All Student ( data : ĠMutable Map < String , ĠGroup Member Info > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġonline Users : ĠMutable List < E du UserInfo >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreams : ĠMutable List < E du Stream Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġonline User Ids Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġonline Users . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġonline User Ids . add ( it . user Uuid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġon Stage User Ids Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġstreams ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Stage User Ids . add ( it . publisher . user Uuid ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Student Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġiterable Ġ= Ġit . entries . iterator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( iterable . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement Ġ= Ġiterable . next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmember Info Ġ= Ġelement . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . uuid Ġ= Ġelement . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Stage User Ids . contains ( member Info . uuid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åľ¨ åı° ä¸ĬçļĦ çĶ¨æĪ· èĤ ¯ å®ļ åľ¨ çº¿ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . on Stage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . online () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . enable Video Ġ= Ġstreams [ on Stage User Ids . indexOf ( member Info . uuid )]. has Video ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . enable Audio Ġ= Ġstreams [ on Stage User Ids . indexOf ( member Info . uuid )]. has Audio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* åįķ çĭ¬ åĪ¤æĸŃ å½ĵåīį çĶ¨æĪ· æĺ¯åĲ¦ åľ¨ çº¿ */ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . online Ġ= Ġonline User Ids . contains ( member Info . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember Info . reward Ġ= Ġget Group Reward ( member Info . uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Student !!. add ( member Info ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Reward By Group ( group Uuid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgroups ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . group Uuid Ġ== Ġgroup Uuid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreward Ġ= Ġit . reward . toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . reward Ġ= Ġreward . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Reward ByUser ( user Uuid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġall Student ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . uuid Ġ== Ġuser Uuid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . reward Ġ= Ġit . reward Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Group Reward ( user Uuid : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġreward Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġgroups ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . members . contains ( user Uuid )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreward Ġ= Ġif Ġ( TextUtils . isEmpty ( it . reward )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . reward . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreward ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** æł¹æį® çĶ¨æĪ· çļĦ uuid èİ·åıĸ çĶ¨æĪ· çļĦ å¥ĸ åĬ ± */ ĊĠĠĠ Ġfun Ġget Student Reward ( uuid : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġreward Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġall Student ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . uuid Ġ== Ġuuid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreward Ġ+= Ġit . reward ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreward ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** æĺ¯åĲ¦ å¼ĢåĲ¯ åĪĨ ç»Ħ */ ĊĠĠĠ Ġfun Ġenable Group (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup States ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . state Ġ== ĠGroup State . ENABLE . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** æĺ¯åĲ¦ å¼ĢåĲ¯ PK */ ĊĠĠĠ Ġfun Ġenable PK (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup States ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġenable Group () Ġ&& Ġit . interact Out Group Ġ== ĠInter act State . ENABLE . value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ }