package Ġcom . tik nil . navigation . core Ċ Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġcom . tik nil . app . core . views . Base Fragment Ċ import Ġkotlinx . coroutines . C ancellable Continuation Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġkotlin . coroutines . resume Ċ Ċ /** Ċ Ġ* ĠA Ġstate less Ġclass Ġthat Ġkeeps Ġ[ Sus pending Stack Navigator ] Ġand Ġ[ Sus pending Multi Stack Navigator ] ĠD RY Ċ Ġ*/ Ċ internal Ġclass ĠCommon Sus pending Navigator ( private Ġval Ġnavigator : ĠIN avig ator ) Ġ: ĠS us pending Navigator Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcontainer Id : ĠInt Ġget () Ġ= Ġnavigator . container Id ĊĊĠĠĠ Ġoverride Ġval Ġcurrent : ĠFragment ? Ġget () Ġ= Ġnavigator . current ĊĊĠĠĠ Ġoverride Ġval Ġprevious : ĠFragment ? Ġget () Ġ= Ġnavigator . previous ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfind ( tag : ĠString ): ĠFragment ? Ġ= Ġnavigator . find ( tag ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġpop () Ġ= Ġsuspend C ancellable Coroutine < Fragment ?> Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġprevious Ġ= Ġnavigator . previous ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġcontinuation . resume If Active ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious . do On Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) Ġ{ Ġcontinuation . resume If Active ( previous ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . pop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġ< T Ġ: ĠFragment > Ġpush ( fragment : ĠT , Ġtag : ĠString ) Ġ= Ġsuspend C ancellable Coroutine < T ?> Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( navigator . current ?. tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ-> Ġcontinuation . resume If Active ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . do On Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) Ġ{ Ġcontinuation . resume If Active ( fragment ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( fragment Ġis ĠBase Fragment < *, Ġ* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . push ( fragment , Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġclear ( up To Tag : ĠString ?, Ġinclude Match : ĠBoolean ): ĠFragment ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Override Ġthis ") Ċ } Ċ Ċ internal Ġfun Ġ< T > ĠC ancellable Continuation < T >. resume If Active ( item : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( isActive ) Ġresume ( item ) Ċ }