package Ġcom . example . not ally . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Nav Destination Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġcom . example . not ally . R Ċ import Ġcom . example . not ally . adapter . Navigation Adapter Ċ import Ġcom . example . not ally . base . Base Activity Ċ import Ġcom . example . not ally . databinding . Activity Main Binding Ċ import Ġcom . example . not ally . repos . model . Nav Model Ċ import Ġcom . example . not ally . ui . nav .* Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlin . Lazy Thread Safety Mode . NONE Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠBase Activity < Main ViewModel , ĠActivity Main Binding >(), ĊĠĠĠ ĠToolbar . On MenuItem ClickListener , ĊĠĠĠ ĠNav Controller . On Destination Changed Listener , ĊĠĠĠ ĠNavigation Adapter . Navigation Adapter Listener Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġlayout Id Ġ= ĠR . layout . activity _ main ĊĊĠĠĠ Ġoverride Ġval ĠviewModel : ĠMain ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġprivate Ġval Ġbottom Nav Drawer : ĠBottom Nav Drawer Fragment Ġby Ġlazy ( NONE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment ById ( R . id . fragment Nav Bottom ) Ġas ĠBottom Nav Drawer Fragment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠKeep Ġtrack Ġof Ġthe Ġcurrent ĠNote Ġbeing Ġviewed , Ġif Ġany , Ġin Ġorder Ġto Ġpass Ġthe Ġcorrect Ġnote Ġid Ġto ĊĠĠĠ Ġ// ĠEdit Note Fragment Ġwhen Ġthis ĠActivity 's ĠF AB Ġis Ġclicked . ĊĠĠĠ Ġprivate Ġvar Ġcurrent Note Id Ġ= Ġ- 1 L ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnav Host Fragment : ĠNav Host Fragment ĊĊĠĠĠ Ġval Ġcurrent Navigation Fragment : ĠFragment ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnav Host Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. child FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fragments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠ Ġoverride Ġfun Ġinit Components () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetUp Bottom Navigation And Fab () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Bottom Navigation And Fab () Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Host Fragment Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport FragmentManager . find Fragment ById ( R . id . fragment Nav Host ) Ġas ĠNav Host Fragment ĊĊĠĠĠĠĠĠĠ Ġbinding . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Host Fragment . nav Controller . add On Destination Changed Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġa Ġcustom Ġanimation Ġfor Ġshowing Ġand Ġhiding Ġthe ĠF AB ĊĠĠĠĠĠĠĠ Ġbinding . fab Take Note . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow Motion Spec Resource ( R . anim ator . fab _ show ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Hide Motion Spec Resource ( R . anim ator . fab _ hide ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Edit Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbottom Nav Drawer . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Slide Action ( Half Clock wise Rotate Slide Action ( binding . img App bar Che vron )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Slide Action ( Alpha Slide Action ( binding . textView App bar Title , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On StateChanged Action ( Show Hide Fab State Action ( binding . fab Take Note )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On StateChanged Action ( Change Settings Menu State Action Ġ{ Ġshow Settings Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠToggle Ġbetween Ġthe Ġcurrent Ġdestination 's ĠB AB Ġmenu Ġand Ġthe Ġmenu Ġwhich Ġshould ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbe Ġdisplayed Ġwhen Ġthe ĠBottom Navigation Drawer Ġis Ġopen . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom AppBar . replace Menu ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . menu . menu _ bottom _ app _ bar _ settings ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġget Bottom AppBar Menu For Destination () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Navigation Listener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe ĠBottom AppBar Ġmenu ĊĠĠĠĠĠĠĠ Ġbinding . bottom AppBar . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav Drawer . toggle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On MenuItem ClickListener ( this @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġup Ġthe ĠBottom Navigation Drawer 's Ġopen / close Ġaff ordance . ĊĠĠĠĠĠĠĠ Ġbinding . layout App bar Content . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Nav Drawer . toggle () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bottom AppBar Menu For Destination ( destination : ĠNav Destination ? Ġ= Ġnull ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdest Ġ= Ġdestination Ġ?: Ġfind Nav Controller ( R . id . fragment Nav Host ). current Destination ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( dest ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . note Fragment Ġ-> ĠR . menu . menu _ bottom _ app _ bar _ home _ menu ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠR . menu . menu _ bottom _ app _ bar _ home _ menu ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Edit Fragment () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Listeners () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MenuItem Click ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destination Changed ( ĊĠĠĠĠĠĠĠ Ġcontroller : ĠNav Controller , ĊĠĠĠĠĠĠĠ Ġdestination : ĠNav Destination , ĊĠĠĠĠĠĠĠ Ġarguments : ĠBundle ? ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nav MenuItem Clicked ( menu : ĠNav Model . Nav MenuItem ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nav Label Clicked ( label : ĠNav Model . Nav Label Item ) Ġ{ ĊĊĠĠĠ Ġ} Ċ } Ċ