/* Ċ Ġ* ĠCreate Ġby ĠS ung bin ĠJ i Ġon Ġ 2 0 2 1 . Ġ 2 . Ġ 6 . Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠS ung bin ĠJ i . ĠAll Ġrights Ġreserved . ĠĊ Ġ* Ċ Ġ* ĠSp ak Chat Ġlicense Ġis Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* ĠS EE ĠLICENSE : Ġhttps :// github . com / s ung bin 5 3 0 4 / Sp ak Chat / blob / master / LICENSE Ċ Ġ*/ Ċ Ċ package Ġme . s ung bin . sp ak chat . user Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġme . s ung bin . android utils . util . Logger Ċ import Ġme . s ung bin . sp ak chat . annotation . ApplicationContext Ċ import Ġme . s ung bin . sp ak chat . user . database . User Database Ċ import Ġme . s ung bin . sp ak chat . user . database . User Entity Ċ import Ġme . s ung bin . sp ak chat . user . model . User Ċ import Ġme . s ung bin . sp ak chat . util . Array Converter . to Text Ċ import Ġme . s ung bin . sp ak chat . util . Exception Util Ċ Ċ class ĠUser Util Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġfire store : ĠFirebase Fire store , ĊĠĠĠ Ġprivate Ġval Ġuser Db : ĠUser Database , ĊĠĠĠ Ġ@ ApplicationContext Ġprivate Ġval Ġcontext : ĠContext , Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġjoin Room ( user : ĠUser , Ġroom Key : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! user . rooms !!. contains ( room Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . rooms . add ( room Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire store . collection (" users ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( user . key . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Database ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . i (" User Util . join Room (${ user . name })", Ġ" ë° © Ġìŀħ ìŀ¥ ĠìĻ Ħ ë£Į : Ġ$ room Key ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġexception Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException Util . except ( exception , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Database ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ Ġ// Ġtodo : ĠIs Ġthis Ġthe Ġbest Ġway Ġto Ġuse ĠCor outines ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġentity : ĠUser Entity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( user ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentity Ġ= ĠUser Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġthis . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġthis . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Id Ġ= Ġthis . login Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġthis . password , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Image Ġ= Ġthis . profile Image . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Image Color Ġ= Ġthis . profile Image Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Image Ġ= Ġthis . background Image . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Message Ġ= Ġthis . status Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirthday Ġ= Ġthis . birthday , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Online Ġ= Ġthis . last Online , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Online Ġ= Ġthis . is Online , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrooms Ġ= Ġthis . rooms . to Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfriends Ġ= Ġthis . friends . to Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsex Ġ= Ġthis . sex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemoji Ġ= Ġthis . emoji . to Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblack Ġ= Ġthis . black . to Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Status Ġ= Ġthis . account Status , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Db . dao (). insert ( entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") Ġ// Ġìĭ ± ê¸ Ģ í Ĩ ¤ ìĹĲ Ġapplication - context ëĿ¼ Ġê ´ ľ ì° ® ì§Ģ ĠìķĬ ëĤĺ ? ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Util : ĠUser Util ĊĠĠĠĠĠĠĠ Ġfun Ġinstance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfire store : ĠFirebase Fire store , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Db : ĠUser Database , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ ApplicationContext Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġ): ĠUser Util Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! :: user Util . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Util Ġ= ĠUser Util ( firestore , Ġuser Db , Ġcontext ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Util ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ