package Ġcom . zj . cf . unit ive Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġcom . zj . cf . FM Store . getSimple Id Ċ import Ġcom . zj . cf . annotations . parser . Constr ain Fragment Annotation Parser Ċ import Ġcom . zj . cf . fragments . Base Fragment Ċ import Ġcom . zj . cf . fragments . Constr ain Fragment Ċ import Ġcom . zj . cf . managers . Constr ain FragmentManager Ċ Ċ internal Ġdata Ġclass ĠProxy Manager < T Ġ: ĠCon str ain Fragment >( internal Ġval Ġm Fragment Class : ĠClass < T >, Ġval Ġid : ĠString , Ġval Ġback Mode : ĠInt , Ġval Ġlaunch Mode : ĠInt , Ġval Ġis Home : ĠBoolean , Ġval Ġbundle : ĠBundle ?) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfragment Manager : ĠCon str ain FragmentManager ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġresult Bundle : ĠBundle ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġget Manager Id (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Manager ?. manager Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Stack Top (): ĠBase Fragment ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Manager ?. get Top Of Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Result Bundle (): ĠBundle ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Bundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Result ( b : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult Bundle Ġ= Ġb ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġset FragmentManager ( fragment Manager : ĠCon str ain FragmentManager ?): ĠCon str ain FragmentManager Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fragment Manager Ġ= Ġfragment Manager ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . fragment Manager Ġ?: Ġthrow ĠNullPointerException (" your Ġfragment Ġmanager Ġcan Ġnot Ġuse Ġform Ġnull !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfinish ( obs : Ġ(( isEmpty Stack : ĠBoolean , Ġclear When Empty Stack : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Manager ?. finish Fragment ( id , Ġobs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Manager ?. clear Stack () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< CLS Ġ: ĠCon str ain Fragment > Ġstart ( fragment Cls : ĠClass < CLS >, Ġbundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġf rg Ġ= ĠCon str ain Fragment Annotation Parser . parse Annotations ( fragment Cls , Ġbundle , Ġfragment Manager ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf rg . set FragmentManager ( fragment Manager ). start Fragment ( f rg ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Illegal AccessException :: class ) ĊĠĠĠ Ġfun Ġ< F Ġ: ĠCon str ain Fragment > Ġup Date Previous Fragment ( previous Fragment : ĠClass < F >, Ġbundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Manager ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproxy Ġ= ĠCon str ain Fragment Annotation Parser . parse Annotations ( previous Fragment , Ġbundle , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Id Ġ= Ġget Simple Id ( it . getCurrent ItemId ()). first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproxy Id Ġ= Ġget Simple Id ( proxy . id ). first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthis Id Ġ= Ġget Simple Id ( this . id ). first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Id Ġ!= Ġcur Id ) Ġthrow ĠIllegal AccessException (" back Ġstack Ġonly Ġaccess Ġin Ġstack Ġtop !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( proxy Id Ġ== Ġthis Id ) Ġthrow ĠIllegal AccessException (" back Ġstack Ġcan Ġnot Ġuse Ġby Ġself Ġclass !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Home Ġ|| Ġit . getCurrent Stack Size () Ġ<= Ġ 1 ) Ġthrow ĠIllegal AccessException (" back Ġstack Ġcan Ġnot Ġuse Ġin Ġhome Ġstatement !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Back Stack ( proxy ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }