package Ġcom . myapp . med led Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . Nav Options Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . ui . setup With Nav Controller Ċ import Ġcom . myapp . med led . authentication . Authentication Ċ import Ġcom . myapp . med led . view _ models . CurrentUser ViewModel Ċ import Ġcom . myapp . med led . view _ models . MainActivity ViewModel Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ chat .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġbottom _ nav . setup With Nav Controller ( find Nav Controller ( R . id . nav _ host _ fragment )) ĊĠĠĠĠĠĠĠ Ġhandle User Auth StateChanged () ĊĠĠĠĠĠĠĠ Ġset Bottom Navigation Visibility () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ------------ ---| ĠHandle Ġuser Ġlog Ġin \ log Ġout Ġ| ------------------ ĊĠĠĠ Ġprivate Ġfun Ġhandle User Auth StateChanged () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthentication : ĠAuthentication Ġ= ĠAuthentication () ĊĠĠĠĠĠĠĠ Ġauthentication . handle Auth StateChanged ({ Ġstate Log In () Ġ}, Ġ{ Ġstate Log Out () Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ================================================ =============== ĊĊĠĠĠ Ġ// log Ġin Ġto Ġapp Ġaction ĊĠĠĠ Ġprivate Ġfun Ġstate Log In () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġfind Nav Controller ( R . id . nav _ host _ fragment ) ĊĠĠĠĠĠĠĠ Ġif ( nav Controller . current Destination !!. id Ġ== ĠR . id . welcome Auth Fragment Ġ|| Ġnav Controller . current Destination !!. id Ġ== ĠR . id . login Fragment Ġ|| Ġnav Controller . current Destination !!. id Ġ== ĠR . id . register Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . med ic ines Fragment , Ġnull , Ġget Nav Options ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// log Ġout Ġfrom Ġapp Ġaction ĊĠĠĠ Ġprivate Ġfun Ġstate Log Out () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġfind Nav Controller ( R . id . nav _ host _ fragment ) ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Controller . current Destination !!. id Ġ!= ĠR . id . welcome Auth Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . welcome Auth Fragment , Ġnull , Ġget Nav Options ()) ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser ViewModel : ĠCurrent User ViewModel Ġ= ĠViewModel Provider ( this ). get ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCurrent User ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠcurrentUser ViewModel . setUser ( null ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ---------------- ------| ĠAdd Ġanimations Ġbetween Ġnavigate Ġto Ġanother Ġfragment Ġ| ----------------------- ĊĠĠĠ Ġprivate Ġfun Ġget Nav Options (): ĠNav Options ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠNav Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Enter Anim ( R . anim . slide _ in _ right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Exit Anim ( R . anim . slide _ out _ left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pop Enter Anim ( R . anim . slide _ in _ left ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pop Exit Anim ( R . anim . slide _ out _ right ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pop Up To ( R . id . med led _ nav _ graph , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ================================================================ ================================ ===== ĊĊĊĠĠĠ Ġ// ---------------- -------------| ĠShow Ġor Ġhide Ġbottom Ġbar Ġbased Ġon Ġcurrent Ġdestination Ġin Ġnavigation Ġcomponent Ġ| ---------------- --------------- ĊĊĠĠĠ Ġprivate Ġfun Ġset Bottom Navigation Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain ViewModel Ġ= ĠViewModel Provider ( this ). get ( MainActivity ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġmain ViewModel . bottom Nav Visibility . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom _ nav . visibility Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller ( R . id . nav _ host _ fragment ). add On Destination Changed Listener Ġ{ Ġ_, Ġdestination , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( destination . id Ġ== ĠR . id . profile Fragment Ġ|| Ġdestination . id Ġ== ĠR . id . med ic ines Fragment Ġ|| Ġdestination . id Ġ== ĠR . id . all Do ctors Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . show Bottom Navigation () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġmain ViewModel . hide Bottom Navigation () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ================================================================ ================================================================ ============= ĊĊĊĠĠĠ Ġ// ---------------- -| Ġhandle Ġback Ġbutton Ġpress Ġin Ġthe Ġchat Ġfragment Ġ| ---------------- ------------- ĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġfind Nav Controller ( R . id . nav _ host _ fragment ) ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Controller . current Destination !!. id Ġ== ĠR . id . chat Fragment ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Chat Button . perform Click () ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// ================================================================================ =============== Ċ }