package Ġq . ror bin . router Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ éĤ ± éķ¿ æµ· Ċ Ġ*/ Ċ internal Ġclass ĠResult Blank Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Router . Navigator . Result Blank Fragment " ĊĠĠĠĠĠĠĠ Ġfun Ġobtain Self By FragmentManager ( manager : ĠFragment Manager ): ĠResult Blank Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfragment Ġ= Ġmanager . find Fragment By Tag ( TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fragment Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Ġ= ĠResult Blank Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . beginTransaction (). add ( fragment , ĠTAG ). commit Now Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment Ġas ĠResult Blank Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġfind FragmentManager By Source ( source : ĠAny ): ĠFragment Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Activity Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . support FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . child FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRoute ErrorException (" only Ġsupport Ġactivity Ġor Ġfragment Ġsource , Ġbut Ġthe Ġsource Ġtype Ġis Ġ: Ġ$ source ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġval Ġrequest Code Pool Ġ= ĠRequest Code Pool () ĊĠĠĠ Ġprivate Ġval Ġresult Callbacks : ĠMutable Map < Int , ĠResult Callback < Any >> Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġprivate Ġval Ġrequest Code Pool For Register Ġ= ĠRequest Code Pool ( 2 0 0 1 , Ġ 2 5 0 0 ) ĊĠĠĠ Ġprivate Ġval Ġresult Callbacks For Register : ĠMutable Map < Int , ĠNavigator Result Register < Any >> Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġbind Request ( result Callback : ĠResult Callback < Any >, Ġlifecycle Owner : ĠAny ? Ġ= Ġnull ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Code Ġ= Ġrequest Code Pool . next () ĊĠĠĠĠĠĠĠ Ġresult Callbacks [ request Code ] Ġ= Ġresult Callback ĊĠĠĠĠĠĠĠ Ġif Ġ( lifecycle Owner Ġis ĠLifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle . add Observer ( object Ġ: ĠLifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġon Dest ory () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Callbacks . remove ( request Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest Code ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġbind Request By Register ( register : ĠNavigator Result Register < Any >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Code Ġ= Ġrequest Code Pool For Register . next () ĊĠĠĠĠĠĠĠ Ġregister . request Code Ġ= Ġrequest Code ĊĠĠĠĠĠĠĠ Ġresult Callbacks For Register [ request Code ] Ġ= Ġregister ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġdata Ġ!= Ġnull Ġ&& Ġdata . extras Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Callbacks [ request Code ]?. invoke ( Navigator Result ( request Code , Ġdata )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Callbacks For Register [ request Code ]?. result Callback ?. invoke ( Navigator Result ( request Code , Ġdata )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult Callbacks . remove ( request Code ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ internal Ġclass ĠRequest Code Pool ( init Value : ĠInt Ġ= Ġ 1 5 0 0 , Ġprivate Ġval Ġlimit : ĠInt Ġ= Ġ 2 0 0 0 ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġinit Ġ= ĠAtomicInteger ( init Value ) ĊĠĠĠ Ġprivate Ġvar Ġcode Ġ= Ġinit ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġnext (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( code . get () Ġ== Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġinit ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode . get And Increment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcode . get () ĊĠĠĠ Ġ} Ċ }