package Ġio . nova foundation . nova . app . root . navigation Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . Id Res Ċ Ċ abstract Ġclass ĠBase Navigator ( ĊĠĠĠ Ġprivate Ġval Ġnavigation Holder : ĠNavigation Holder Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġback () Ġ{ ĊĠĠĠĠĠĠĠ Ġnavigation Holder . execute Back () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġconditional Ġnavigation Ġbased Ġon Ġcurrent Ġdestination ĊĠĠĠĠ Ġ* Ġ@ param Ġcases Ġ- Ġarray Ġof Ġpairs Ġ( current Destination , Ġnavigation Action ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġperform Navigation ( ĊĠĠĠĠĠĠĠ Ġcases : ĠArray < Pair < Int , ĠInt >>, ĊĠĠĠĠĠĠĠ Ġargs : ĠBundle ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġnavigation Holder . nav Controller ĊĊĠĠĠĠĠĠĠ Ġnav Controller ?. current Destination ?. let Ġ{ Ġcurrent Destination Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġcase ) Ġ= Ġcases . find Ġ{ Ġ( start Destination , Ġ_) Ġ-> Ġstart Destination Ġ== Ġcurrent Destination . id Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Unknown Ġcase Ġfor Ġ${ current Destination . label }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Destination . getAction ( case )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( case , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġperform Navigation (@ Id Res Ġaction Id : ĠInt , Ġargs : ĠBundle ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġnavigation Holder . nav Controller ĊĊĠĠĠĠĠĠĠ Ġnav Controller ?. current Destination ?. getAction ( action Id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( action Id , Ġargs ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ