/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠSO UP Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġsoup . movie . ui . main Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . core . view . Window Compat Ċ import Ġandroidx . core . view . Window Insets Compat . Type . system Bars Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . ui . Navigation UI Ċ import Ġcom . google . android . play . core . split compat . Split Compat Ċ import Ġcom . google . firebase . messaging . Firebase Messaging Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġdev . chr is ban es . in setter . In setter Ċ import Ġsoup . movie . R Ċ import Ġsoup . movie . config . Config Ċ import Ġsoup . movie . config . Remote Config Ċ import Ġsoup . movie . core . Main Directions Ċ import Ġsoup . movie . databinding . MainActivity Binding Ċ import Ġsoup . movie . ext . consume Ċ import Ġsoup . movie . ext . observe Event Ċ import Ġsoup . movie . spec . Firebase Link Ċ import Ġsoup . movie . spec . K ak ao Link Ċ import Ġsoup . movie . system . System Event Ċ import Ġsoup . movie . system . System ViewModel Ċ import Ġsoup . movie . ui . base . consume Back Event In Child Fragment Ċ import Ġsoup . movie . util . view Bindings Ċ import Ġsoup . movie . work . Legacy Worker Ċ import Ġsoup . movie . work . Open Date Alarm Worker Ċ import Ġsoup . movie . work . Open Date Sync Worker Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Bindings ( MainActivity Binding :: inflate ) ĊĊĠĠĠ Ġprivate Ġval Ġsystem ViewModel : ĠSystem ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġval Ġlistener Ġ= ĠNav Controller . On Destination Changed Listener Ġ{ Ġ_, Ġdestination , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ Ġbinding . navigation View . setChecked Item ( destination . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġattach Base Context ( new Base : ĠContext ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . attach Base Context ( new Base ) ĊĠĠĠĠĠĠĠ ĠSplit Compat . install Activity ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Override Configuration ( override Configuration : ĠConfiguration ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// issue tracker . google . com / issues / 1 4 7 9 3 7 9 7 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ<= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . apply Override Configuration ( override Configuration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Theme ( R . style . Theme _ Mo op _ Main ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ ĠWindow Compat . set Decor Fits System Windows ( window , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠIn setter . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Apply Insets Listener Ġ{ Ġcontainer , Ġin sets , ĠinitialState Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsystem Insets Ġ= Ġin sets . get Insets ( system Bars ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . update Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= ĠinitialState . p add ings . left Ġ+ Ġsystem Insets . left , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= ĠinitialState . p add ings . right Ġ+ Ġsystem Insets . right ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply To View ( binding . root ) ĊĠĠĠĠĠĠĠ ĠIn setter . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Apply Insets Listener Ġ{ Ġview , Ġin sets , ĠinitialState Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . update Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠinitialState . p add ings . top Ġ+ Ġin sets . get Insets ( system Bars ()). top ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply To View ( binding . navigation View ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠImprove Ġthis Ġplease ĊĠĠĠĠĠĠĠ ĠFirebase Messaging . getInstance (). is Auto Init Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġintent ?. handle Deep Link () ĊĊĠĠĠĠĠĠĠ Ġsystem ViewModel . system Event . observe Event ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Event ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . ui Event . observe Event ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Event ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . navigation View . set Navigation ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsume Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . drawer Layout . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġnav Host Fragment . find Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . home Ġ-> Ġnav Controller . pop Back Stack ( R . id . home , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNavigation UI . on Nav Destination Selected ( it , Ġnav Controller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig : ĠConfig Ġ= ĠRemote Config () ĊĠĠĠĠĠĠĠ Ġconfig . fetch And Activate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . allow To Run Legacy Worker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLegacy Worker . enqueue Work ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLegacy Worker . cancel Work ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠOpen Date Alarm Worker . enqueue Periodic Work ( this ) ĊĠĠĠĠĠĠĠ ĠOpen Date Sync Worker . enqueue Periodic Work ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġnav Host Fragment . find Nav Controller (). add On Destination Changed Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġnav Host Fragment . find Nav Controller (). remove On Destination Changed Listener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġintent ?. handle Deep Link () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠIntent . handle Deep Link () Ġ{ ĊĠĠĠĠĠĠĠ ĠFirebase Link . extract Movie Id ( this ) Ġ{ Ġmovie Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie Id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . request Movie ( movie Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK ak ao Link . extract Movie Id ( this )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . request Movie ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Event ( event : ĠSystem Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSystem Event . Open Drawer Menu Ui Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . drawer Layout . open Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Event ( event : ĠMain Ui Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain Ui Event . Show Detail Ui Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Host Fragment . find Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Directions . action To Detail ( event . movie ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . drawer Layout . is Drawer Visible ( Gravity Compat . START )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . drawer Layout . close Drawer ( Gravity Compat . START ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( nav Host Fragment . consume Back Event In Child Fragment ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġnav Host Fragment : ĠFragment ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsupport FragmentManager . find Fragment ById ( R . id . nav Host Fragment ) Ġas ĠNav Host Fragment Ċ } Ċ