package Ġcom . glow ka . raf al . super hero . presentation . architecture čĊč Ċ import Ġandroid . os . Bundle č Ċ import Ġandroidx . fragment . app . FragmentManager č Ċ import Ġandroidx . fragment . app . commit čĊč Ċ /** čĊ Ġ* ĠCreated Ġby ĠR af al Ġon Ġ 1 3 . 0 4 . 2 0 2 1 . čĊ Ġ*/ čĊč Ċ interface ĠFragment Navigator Ġ{ čĊĠ Ġfun Ġpush ( screen : ĠScreen < *, Ġ*, Ġ*, Ġ* >) čĊĠ Ġfun Ġpop Back ( screen : ĠScreen < *, Ġ*, Ġ*, Ġ* >) čĊĠ Ġfun Ġpop Back To ( screen : ĠScreen < *, Ġ*, Ġ*, Ġ* >) č Ċ } čĊč Ċ interface ĠFragment Navigator Attachment Ġ{ čĊĠ Ġfun Ġattach ( fm : ĠFragment Manager ) čĊĠ Ġfun Ġdetach () č Ċ } čĊč Ċ class ĠFragment Navigator Impl ( val Ġcontainer Id : ĠInt ) Ġ: ĠFragment Navigator Attachment , čĊĠ ĠFragment Navigator Ġ{ čĊčĊĠ Ġprivate Ġvar Ġfragment Manager : ĠFragment Manager ? Ġ= Ġnull čĊĠ Ġprivate Ġvar Ġwaiting Operation : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull čĊčĊĠ Ġoverride Ġfun Ġattach ( fm : ĠFragment Manager ) Ġ{ čĊĠĠĠ Ġfragment Manager Ġ= Ġfm čĊĠĠĠ Ġwaiting Operation ?. invoke () čĊĠĠĠ Ġwaiting Operation Ġ= Ġnull čĊĠ Ġ} čĊčĊĠ Ġoverride Ġfun Ġdetach () Ġ{ čĊĠĠĠ Ġfragment Manager Ġ= Ġnull čĊĠ Ġ} čĊčĊĠ Ġoverride Ġfun Ġpush ( screen : ĠScreen < *, Ġ*, Ġ*, Ġ* >) Ġ{ čĊĠĠĠ Ġval Ġfragment Tag Ġ= Ġscreen . screen Tag čĊĠĠĠ Ġval Ġfm Ġ= Ġfragment Manager čĊĠĠĠ Ġif Ġ( fm Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠ Ġwaiting Operation Ġ= Ġ{ čĊĠĠĠĠĠĠĠ Ġpush ( screen Ġ= Ġscreen ) čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠ Ġfm . commit Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= ĠBundle (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠ Ġput String ( Base Fragment . ARG _ SCOPE , Ġscreen . scope . scope Name ) čĊĠĠĠĠĠĠĠĠĠ Ġput String ( Base Fragment . ARG _ SCREEN _ TAG , Ġfragment Tag ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreplace ( container Id , Ġscreen . fragment Class . java , Ġarguments , Ġfragment Tag ) čĊĠĠĠĠĠĠĠ ĠaddTo Back Stack ( fragment Tag ) čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġoverride Ġfun Ġpop Back ( screen : ĠScreen < *, Ġ*, Ġ*, Ġ* >) Ġ{ čĊĠĠĠ Ġval Ġfm Ġ= Ġfragment Manager čĊĠĠĠ Ġif Ġ( fm Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠ Ġwaiting Operation Ġ= Ġ{ čĊĠĠĠĠĠĠĠ Ġpop Back ( screen Ġ= Ġscreen ) čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠ Ġfm . pop Back Stack ( screen . screen Tag , ĠFragment Manager . POP _ BACK _ STACK _ INCL USIVE ) čĊĠĠĠ Ġ} čĊĠ Ġ} čĊčĊĠ Ġoverride Ġfun Ġpop Back To ( screen : ĠScreen < *, Ġ*, Ġ*, Ġ* >) Ġ{ čĊĠĠĠ Ġval Ġfm Ġ= Ġfragment Manager čĊĠĠĠ Ġif Ġ( fm Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠ Ġwaiting Operation Ġ= Ġ{ čĊĠĠĠĠĠĠĠ Ġpop Back To ( screen Ġ= Ġscreen ) čĊĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠ Ġfm . pop Back Stack ( screen . screen Tag , Ġ 0 ) čĊĠĠĠ Ġ} čĊĠ Ġ} čĊč Ċ }