package Ġcom . github . ll max im ll . m yst ory is my world . presentation . main . view Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . core . view . Window Compat Ċ import Ġandroidx . core . view . is G one Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġandroidx . navigation . ui . Navigation UI Ċ import Ġcom . github . ll max im ll . m yst ory is my world . R Ċ import Ġcom . github . ll max im ll . m yst ory is my world . databinding . Activity Main Binding Ċ import Ġcom . github . ll max im ll . m yst ory is my world . domain . models . notification . Notification Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . auth . general . Auth Fragment Directions Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . main . view model . Main ViewModel Impl Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . main . view model . Shared ViewModel Impl Ċ import Ġcom . github . ll max im ll . m yst ory is my world . presentation . states . Fetch State Ċ import Ġcom . github . ll max im ll . m yst ory is my world . utils . MP references Ċ import Ġcom . github . ll max im ll . m yst ory is my world . utils . Network Status Helper Ċ import Ġcom . github . ll max im ll . m yst ory is my world . utils . Night Mode Type Ċ import Ġcom . github . ll max im ll . m yst ory is my world . utils . safe Navigate Ċ import Ġcom . parse . Parse User Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Main Binding Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġnav Controller Ġby Ġlazy ( Lazy Thread Safety Mode . NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Host Fragment Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . nav _ host _ fragment ) Ġas ĠNav Host Fragment ĊĠĠĠĠĠĠĠ Ġnav Host Fragment . nav Controller ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Impl Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġshared ViewModel Impl : ĠShared ViewModel Impl Ġby Ġview Models () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( window , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Parse User . getCurrent User () Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirection Ġ= ĠAuth Fragment Directions . action Global SignIn Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . safe Navigate ( direction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup Splash Screen () ĊĠĠĠĠĠĠĠ Ġsetup Bottom NavigationBar () ĊĊĠĠĠĠĠĠĠ Ġadd Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Night Mode () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsaved Night Mode Value Ġ= ĠM Preferences . get Appearance () ĊĠĠĠĠĠĠĠ Ġval Ġselected Night Mode Ġ= ĠNight Mode Type . from Value ( saved Night Mode Value ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . v (" selected Night Mode :$ selected Night Mode ") ĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( selected Night Mode . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Splash Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent : ĠView Ġ= ĠfindViewById ( android . R . id . content ) ĊĠĠĠĠĠĠĠ Ġcontent . view Tree Observer . add On Pre Draw Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠView Tree Observer . On Pre Draw Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Draw (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Night Mode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Theme ( R . style . Theme _ My Story Is My World ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( viewModel . getIs Ready ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . view Tree Observer . remove On Pre Draw Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Bottom NavigationBar () Ġ{ ĊĠĠĠĠĠĠĠ ĠNavigation UI . setup With Nav Controller ( binding . bottom Nav View , Ġnav Controller ) ĊĠĠĠĠĠĠĠ Ġnav Controller . add On Destination Changed Listener Ġ{ Ġ_, Ġdestination , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( destination . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ notifications Ġ-> Ġshow Bottom View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ explore Ġ-> Ġshow Bottom View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ my _ stories Ġ-> Ġshow Bottom View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . navigation _ profile Ġ-> Ġshow Bottom View ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġshow Bottom View ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" destination =${ destination . label }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Bottom View ( show : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Nav View . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Nav View . is G one Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠNetwork Status Helper ( this @ MainActivity ). observe ( this ) Ġ{ Ġnetwork Status Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel Impl . set Network State ( network Status ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshared ViewModel Impl . get Notifications State . observe ( this , Ġ:: handle Get Notifications ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Get Notifications ( state : ĠFetch State < List < Notification >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch State . Initial Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch State . Loading Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFetch State . Error Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFetch State . NotFound Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFetch State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbadge Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . data . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . view ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( badge Count Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Nav View . get OrCreate Badge ( R . id . navigation _ notifications ). number Ġ= Ġbadge Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Nav View . remove Badge ( R . id . navigation _ notifications ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnav Controller . navigate Up () Ġ|| Ġsuper . on Navigate Up () ĊĠĠĠ Ġ} Ċ }