package Ġdev . hot wire . tur bo . deleg ates Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . add Callback Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġdev . hot wire . tur bo . nav . Tur bo Nav Destination Ċ import Ġdev . hot wire . tur bo . ob servers . Tur bo Activity Observer Ċ import Ġdev . hot wire . tur bo . session . Tur bo Session Nav Host Fragment Ċ import Ġdev . hot wire . tur bo . visit . Tur bo Visit Options Ċ Ċ /** Ċ Ġ* ĠInitializes Ġthe ĠActivity Ġfor ĠTur bo Ġnavigation Ġand Ġprovides Ġall Ġthe Ġhooks Ġfor Ġan Ċ Ġ* ĠActivity Ġto Ġcommunicate Ġwith ĠTur bo Ġ( and Ġvice Ġvers a ). Ċ Ġ* Ċ Ġ* Ġ@ property Ġactivity ĠThe ĠActivity Ġto Ġbind Ġthis Ġdelegate Ġto . Ċ Ġ* Ġ@ property Ġcurrent Nav Host Fragment Id ĠThe Ġresource ĠID Ġof Ġthe Ġ[ Tur bo Session Nav Host Fragment ] Ċ Ġ* Ġ Ġinstance Ġhosted Ġin Ġyour ĠActivity 's Ġlayout Ġresource . Ċ Ġ*/ Ċ @ Suppress (" unused ", Ġ" Member Visibility Can Be Private ") Ċ class ĠTur bo Activity Delegate ( ĊĠĠĠ Ġval Ġactivity : ĠAppCompatActivity , ĊĠĠĠ Ġvar Ġcurrent Nav Host Fragment Id : ĠInt Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġnav Host Fragments Ġ= Ġmutable Map Of < Int , ĠTur bo Session Nav Host Fragment >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe ĠActivity 's Ġcurrently Ġactive Ġ[ Tur bo Session Nav Host Fragment ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcurrent Session Nav Host Fragment : ĠTur bo Session Nav Host Fragment ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnav Host Fragment ( current Nav Host Fragment Id ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġcurrently Ġactive ĠFragment Ġdestination Ġhosted Ġin Ġthe Ġcurrent ĊĠĠĠĠ Ġ* Ġ[ Tur bo Session Nav Host Fragment ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġcurrent Nav Destination : ĠTur bo Nav Destination ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurrent Fragment Ġas ĠTur bo Nav Destination ? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegisters Ġthe Ġprovided Ġnav Ġhost Ġfragment Ġand Ġinitializes Ġthe ĊĠĠĠĠ Ġ* ĠActivity Ġwith Ġa ĠBack Pressed Dispatcher Ġthat Ġproperly Ġhandles ĠFragment ĊĠĠĠĠ Ġ* Ġnavigation Ġwith Ġthe Ġback Ġbutton . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Nav Host Fragment ( current Nav Host Fragment Id ) ĊĠĠĠĠĠĠĠ Ġactivity . lifecycle . add Observer ( Tur bo Activity Observer ()) ĊĠĠĠĠĠĠĠ Ġactivity . on Back Pressed Dispatcher . add Callback ( activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate Back () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġthe Ġability Ġto Ġregister Ġadditional Ġnav Ġhost Ġfragments . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnav Host Fragment Id ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġregister Nav Host Fragment (@ Id Res Ġnav Host Fragment Id : ĠInt ): ĠTur bo Session Nav Host Fragment Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Nav Host Fragment ( nav Host Fragment Id ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Host Fragments [ nav Host Fragment Id ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFinds Ġthe Ġnav Ġhost Ġfragment Ġassociated Ġwith Ġthe Ġprovided Ġresource ĠID . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnav Host Fragment Id ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnav Host Fragment (@ Id Res Ġnav Host Fragment Id : ĠInt ): ĠTur bo Session Nav Host Fragment Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( nav Host Fragments [ nav Host Fragment Id ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġregistered ĠTur bo Session Nav Host Fragment Ġfound " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġthe ĠTur bo Ġsessions Ġassociated Ġwith Ġall Ġregistered Ġnav Ġhost Ġfragments . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset Sessions () Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Host Fragments . forEach Ġ{ Ġit . value . session . reset () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe sets Ġall Ġregistered Ġnav Ġhost Ġfragments Ġvia Ġ[ Tur bo Session Nav Host Fragment . reset ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġreset Nav Host Fragments () Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Host Fragments . forEach Ġ{ Ġit . value . reset () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNavig ates Ġto Ġthe Ġspecified Ġlocation . ĠThe Ġresulting Ġdestination Ġand Ġits Ġpresentation ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġdetermined Ġusing Ġthe Ġpath Ġconfiguration Ġrules . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlocation ĠThe Ġlocation Ġto Ġnavigate Ġto . ĊĠĠĠĠ Ġ* Ġ@ param Ġoptions ĠVisit Ġoptions Ġto Ġapply Ġto Ġthe Ġvisit . Ġ( optional ) ĊĠĠĠĠ Ġ* Ġ@ param Ġbundle ĠBund led Ġarguments Ġto Ġpass Ġto Ġthe Ġdestination . Ġ( optional ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnavigate ( ĊĠĠĠĠĠĠĠ Ġlocation : ĠString , ĊĠĠĠĠĠĠĠ Ġoptions : ĠTur bo Visit Options Ġ= ĠTur bo Visit Options (), ĊĠĠĠĠĠĠĠ Ġbundle : ĠBundle ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Nav Destination ?. navigate ( location , Ġoptions , Ġbundle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNavig ates Ġup Ġto Ġthe Ġprevious Ġdestination . ĠSee Ġ[ Nav Controller . navigate Up ] Ġfor ĊĠĠĠĠ Ġ* Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnavigate Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Nav Destination ?. navigate Up () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNavig ates Ġback Ġto Ġthe Ġprevious Ġdestination . ĠSee Ġ[ Nav Controller . pop Back Stack ] Ġfor ĊĠĠĠĠ Ġ* Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġnavigate Back () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Nav Destination ?. navigate Back () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthe Ġnavigation Ġback Ġstack Ġto Ġthe Ġstart Ġdestination . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Back Stack ( on Cle ared : Ġ() Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Nav Destination ?. clear Back Stack ( on Cle ared ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRefresh Ġthe Ġcurrent Ġdestination . ĠSee Ġ[ Tur bo Nav Destination . refresh ] Ġfor ĊĠĠĠĠ Ġ* Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh ( display Progress : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Nav Destination ?. refresh ( display Progress ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcurrent Fragment : ĠFragment ? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Session Nav Host Fragment . is Added Ġ&& Ġ! current Session Nav Host Fragment . is Detached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Session Nav Host Fragment . child FragmentManager . primary Navigation Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Nav Host Fragment (@ Id Res Ġnav Host Fragment Id : ĠInt ): ĠTur bo Session Nav Host Fragment Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity . support FragmentManager . find Fragment ById ( nav Host Fragment Id ) Ġas ? ĠTur bo Session Nav Host Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" No ĠTur bo Session Nav Host Fragment Ġfound Ġwith ĠID : Ġ$ nav Host Fragment Id ") ĊĠĠĠ Ġ} Ċ } Ċ