package Ġau . id . rl ac . util . n ucleus Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Fragment Ċ import Ġandroid . os . Bundle Ċ import Ġau . id . rl ac . util . android . is Removing Or Parent Removing Ċ import Ġn ucleus . factory . Presenter Factory Ċ import Ġn ucleus . manager . Presenter Manager Ċ import Ġn ucleus . presenter . Presenter Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġthat Ġmanages Ġthe Ġlifecycle Ġevents Ġfor Ġa Ġ[ Fragment ] Ġor Ġ[ Activity ] Ġ[ Presenter ]. Ċ Ġ* Ċ Ġ* ĠThe ĠFragment Ġor ĠActivity Ġusing Ġthe Ġhelper Ġmust Ġcall Ġthe Ġappropriate Ġlifecycle Ġmethods Ġduring Ċ Ġ* Ġits Ġlifecycle Ġ- Ġ[ create ], Ġ[ resume ], Ġ[ pause ], Ġ[ save ], Ġand Ġ[ destroy ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġfactory ĠConstructs Ġa Ġnew Ġpresenter Ġinstance Ġif Ġone Ġis Ġnot Ġfound Ġin Ġthe Ġmanager . Ċ Ġ* Ġ@ param Ġmanager ĠPres enter Ġinstance Ġmanager . Ċ Ġ*/ Ċ public Ġclass ĠN ucleus Helper < ViewType , ĠPres enter Type Ġ: ĠPres enter < ViewType >> Ċ ( private Ġval Ġmanager : ĠPres enter Manager , Ċ Ġprivate Ġval Ġfactory : ĠPres enter Factory < Presenter Type >) Ġ{ ĊĊĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġval Ġpresenter State Key Ġ= Ġ" presenter _ state " ĊĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġview Ref : ĠView Type ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġmaybe Presenter : ĠPres enter Type ? Ġ= Ġnull ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠGet Ġthe Ġpresenter Ġinstance , Ġavailable Ġafter Ġ[ create ] Ġhas Ġbeen Ġcalled . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġ[ create ] Ġhas Ġnot Ġbeen Ġcalled . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġval Ġpresenter : ĠPres enter Type ĊĠĠĠ Ġget () Ġ= Ġmaybe Presenter Ġ?: Ġthrow ĠIllegalStateException (" Create Ġnot Ġyet Ġcalled ") ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠInitialize Ġthe Ġpresenter Ġor Ġre attach Ġto Ġan Ġexisting Ġpresenter Ġinstance Ġfor Ġthis Ġview . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġstate ĠSaved Ġstate Ġinstance Ġfrom Ġthe Ġview Ġclass Ġif Ġavailable . ĊĠĠ Ġ* Ġ@ param Ġview Ref ĠThe Ġview Ġreference . ĠMust Ġbe Ġa Ġ[ Fragment ] Ġor Ġ[ Activity ]. ĊĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġif Ġ[ view Ref ] Ġis Ġunsupported Ġ( not Ġa Ġ[ Fragment ] Ġor Ġ[ Activity ]). ĊĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġ[ create ] Ġhas Ġalready Ġbeen Ġcalled Ġon Ġthis Ġhelper Ġinstance . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġfun Ġcreate ( view Ref : ĠView Type , Ġstate : ĠBundle ?) Ġ{ ĊĠĠĠ Ġif Ġ( this . view Ref Ġ!= Ġnull ) Ġthrow ĠIllegalStateException (" Create Ġalready Ġcalled ") ĊĊĠĠĠ Ġwhen Ġ( view Ref ) Ġ{ ĊĠĠĠĠĠ Ġis ĠFragment Ġ-> ĠUnit ĊĠĠĠĠĠ Ġis ĠActivity Ġ-> ĠUnit ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" View Ġmust Ġbe Ġa ĠFragment Ġor ĠActivity ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġthis . view Ref Ġ= Ġview Ref ĊĠĠĠ Ġval Ġpresenter State Ġ= Ġstate ?. get Bundle ( presenter State Key ) ĊĠĠĠ Ġmaybe Presenter Ġ= Ġmanager . provide < Presenter Type >( factory , Ġpresenter State ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠAttach Ġthe Ġview Ġfor Ġthe Ġhelper Ġto Ġthe Ġpresenter . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġ[ create ] Ġhas Ġnot Ġbeen Ġcalled . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġfun Ġresume () Ġ{ ĊĠĠĠ Ġwith Ġ( view Ref ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( this Ġ== Ġnull ) Ġthrow ĠIllegalStateException (" Create Ġnot Ġcalled ") ĊĠĠĠĠĠ Ġpresenter . take View ( this ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDrop Ġthe Ġview Ġfor Ġthe Ġhelper Ġfrom Ġthe Ġpresenter . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġ[ create ] Ġhas Ġnot Ġbeen Ġcalled . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġfun Ġpause () Ġ{ ĊĠĠĠ Ġpresenter . drop View () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIf Ġthe Ġview Ġclass Ġis Ġper manently Ġbeing Ġdestroyed Ġ( finish ing Ġor Ġbeing Ġremoved ), Ġdest ro ys Ġthe ĊĠĠ Ġ* Ġpresenter . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ throws ĠIllegalStateException Ġif Ġ[ create ] Ġhas Ġnot Ġbeen Ġcalled Ġor Ġthe Ġattached Ġview Ġis Ġnot ĊĠĠ Ġ* Ġsupported . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġfun Ġdestroy () Ġ{ ĊĠĠĠ Ġif Ġ( is View Go ing Away ()) Ġmanager . destroy ( presenter ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRequests Ġthe Ġpresenter Ġmanager Ġsave Ġthe Ġpresent ers Ġstate Ġto Ġa Ġ[ Bundle ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠThis Ġmethod Ġshould Ġusually Ġbe Ġcalled Ġwhen Ġthe Ġview Ġis Ġsaving Ġinstance Ġstate . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġstate ĠBundle Ġto Ġsave Ġpresenter Ġstate Ġto . ĊĠĠ Ġ*/ ĊĠ Ġpublic Ġfun Ġsave ( state : ĠBundle ) Ġ{ ĊĠĠĠ Ġstate . put Bundle ( presenter State Key , Ġmanager . save ( presenter )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġis View Go ing Away (): ĠBoolean Ġ= ĊĠĠĠĠĠ Ġwith Ġ( view Ref !! ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Ġ-> Ġis Removing Or Parent Removing () ĊĠĠĠĠĠĠĠĠĠ Ġis ĠActivity Ġ-> Ġis Finish ing () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ċ }