package Ġcom . ch he msr ong long . together . Message Tab Ċ Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġcom . ch he msr ong long . together . DataModel . Post Ċ import Ġcom . google . android . gms . tasks . On Failure Listener Ċ import Ġshow V Log Ċ import Ġandroid . graphics . Bitmap Ċ import Ġcom . ch he msr ong long . together . Common .* Ċ import Ġcom . ch he msr ong long . together . DataModel . Main Chat Ċ import Ġcom . ch he msr ong long . together . DataModel . User Model Ċ import Ġcom . ch he msr ong long . together . Firebase .* Ċ import Ġcom . ch he msr ong long . together . util . IMAGE _ PATH _ PROFILE Ċ import Ġcom . ch he msr ong long . together . util . map Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . firebase . firestore . auth . User ĊĊ Ċ class ĠMessage ViewModel ( on Failure Listener : ĠOn Failure Listener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Repo : ĠUsers Repository ) Ġ: ĠBase ViewModel ( on Failure Listener ) Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġuid : ĠString ĊĊĠĠĠ Ġlateinit Ġvar Ġchat List : ĠLive Data < List < Main Chat >> ĊĠĠĠ Ġlateinit Ġvar Ġmy Fav ar ite : ĠLive Data < List < User Post >> ĊĠĠĠ Ġlateinit Ġvar Ġmy Activity : ĠLive Data < List < User Post >> ĊĠĠĠ Ġlateinit Ġvar Ġmy Posts Ġ: ĠLive Data < List < User Post >> ĊĠĠĠ Ġlateinit Ġvar Ġmy Friends Ġ: ĠLive Data < List < User Model >> ĊĊĠĠĠ Ġprivate Ġvar Ġactivity Post List Ġ= Ġmap Of < String , ĠLive Data < Post >>() ĊĠĠĠ Ġprivate Ġvar Ġpost List Ġ= Ġmap Of < String , ĠLive Data < Post >>() ĊĊĠĠĠ Ġfun Ġinit ( uid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: uid . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . uid Ġ= Ġuid ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat List Ġ= Ġuser Repo . get Chat List ( uid ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . sorted By Descending Ġ{ Ġit . timestamp Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupload User Image ( bitmap : ĠBitmap , Ġcallback : Ġ( status : ĠBoolean ) Ġ-> ĠUnit ){ ĊĠĠĠĠĠĠĠ Ġupload Image ("$ uid /$ IMAGE _ PATH _ PROFILE ", bitmap ) Ġ{ Ġdata , Ġdownload Url Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow V Log (" Picture Ġup la ode d Ġ: Ġ Ġ$ download Url ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtask Ġ= ĠĠĠ Ġuser Repo . update User Photo ( download Url !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġupdate UserName ( userName Ġ: ĠString ): ĠTask < Unit > Ġ= Ġuser Repo . update UserName ( userName ). add On Failure Listener ( on Failure Listener ) ĊĊĊĠĠĠ Ġfun Ġget Post ( post Id : ĠString , Ġis My Post Ġ: ĠBoolean ): ĠLive Data < Post >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is My Post ) Ġreturn Ġ Ġactivity Post List [ post Id ] ĊĠĠĠĠĠĠĠ Ġelse Ġreturn Ġpost List [ post Id ] ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġfun Ġloads Post ( post Id : ĠString , Ġis My Post : ĠBoolean ): ĠLive Data < Post > Ġ{ Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( is My Post ){ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Loaded Number Ġ= Ġactivity Post List [ post Id ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Loaded Number Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġli ved ata Ġ= Ġfeed Posts Repo . get Feed Post ( uid , post Id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Post List Ġ+= Ġpost Id Ġto Ġli ved ata Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġli ved ata Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexisting Loaded Number Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} else { Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexisting Loaded Number Ġ= Ġpost List [ post Id ] Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( existing Loaded Number Ġ== Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġli ved ata Ġ= Ġfeed Posts Repo . get Feed Post ( uid , post Id ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost List Ġ+= Ġpost Id Ġto Ġli ved ata Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġli ved ata Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġexisting Loaded Number Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} ĊĊ Ċ }