package Ġcom . th ak urn it in 2 6 8 4 . scre ent imer ank Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . google . firebase . firestore . FieldValue Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġkotlin . properties . Deleg ates Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Database " Ċ Ċ class ĠDatabase Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdatabase : ĠFirebase Fire store ĊĠĠĠ Ġfun Ġopen () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Db For First Time ( u Id : ĠString , Ġname : ĠString ?, Ġemail : ĠString ?, ĠimageUrl : ĠString ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġusers Ref Ġ= Ġdatabase . collection (" users "). document ( u Id ) ĊĊĠĠĠĠĠĠĠ Ġusers Ref . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocument Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" email " Ġto Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url " Ġto ĠimageUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" screen Time " Ġto Ġtotal Time 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" rooms " Ġto Ġarray ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( document . get (" email ") Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( u Id ). set ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" old ĠUser 1 Ġ$ u Id ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( u Id ). update (" name ", Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( u Id ). update (" email ", Ġemail ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( u Id ). update (" url ", ĠimageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" old ĠUser 2 Ġ$ u Id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( u Id ). set ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" New ĠUser ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" get Ġfailed Ġwith Ġ", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate New Room ( u Id : ĠString , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġto Ġname , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" members " Ġto Ġarray ListOf ( u Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdatabase . collection (" rooms "). add ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocument Reference Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( u Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" rooms ", ĠField Value . array Union ( document Reference . id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Document Snapshot Ġwritten Ġwith ĠID : Ġ${ document Reference . id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error Ġadding Ġdocument ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġadd For Room ( userId : ĠString ?, Ġroom Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( userId !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" rooms ", ĠField Value . array Union ( roomId )) ĊĠĠĠĠĠĠĠ Ġdatabase . collection (" rooms "). document ( roomId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" members ", ĠField Value . array Union ( userId )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Time ( userId : ĠString ?, Ġtime : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( userId !! ). update (" screen Time ", Ġtime ) ĊĊĠĠĠ Ġ} ĊĊĊĊĊĠĠĠ Ġfun Ġdelete Room ( userId : ĠString , Ġroom Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġby ĠDeleg ates . notNull < Int >() ĊĠĠĠĠĠĠĠ Ġdatabase . collection (" rooms "). document ( roomId ). get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocument Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmembers Ġ= Ġdocument Snapshot . get (" members ") Ġas ĠArrayList < String > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= Ġmembers . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" rooms ", ĠField Value . array Remove ( roomId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" rooms "). document ( roomId ). delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" rooms "). document ( roomId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" members ", ĠField Value . array Remove ( userId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . collection (" users "). document ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update (" rooms ", ĠField Value . array Remove ( roomId )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }