package Ġapp . jun hy o un gle e . arch roid . runtime . core . presenter Ċ Ċ import Ġapp . jun hy o un gle e . arch roid . runtime . core . view . M vp View Ċ Ċ /** Ċ Ġ* ĠTODO Ġcreate Ġa Ġmethod Ġthat Ġbind s Ġview Ġinstance Ġto ĠPres enter Ċ Ġ*/ Ċ class ĠPres enter Provider ( ĊĠĠĠ Ġprivate Ġval Ġpresenter Store : ĠPres enter Store , ĊĠĠĠ Ġprivate Ġval Ġfactory : ĠFactory Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġ< V : ĠM vp View , ĠP Ġ: ĠM vp Presenter < V >> Ġget ( key : ĠString , Ġpresenter Type : ĠClass < P >, Ġview Type : ĠClass < V >, Ġview : ĠV ): ĠP Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinstance : ĠM vp Presenter < out ĠM vp View >? Ġ= Ġpresenter Store . get ( key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( presenter Type . is Instance ( instance )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ġas ĠP ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinstance Ġ= Ġfactory . create ( presenter Type , Ġview Type , Ġview ) ĊĠĠĠĠĠĠĠ Ġpresenter Store . put ( key , Ġinstance ) ĊĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< V Ġ: ĠM vp View , ĠP Ġ: ĠM vp Presenter < V >> Ġget ( presenter Type : ĠClass < P >, Ġview Type : ĠClass < V >, Ġview : ĠV ): ĠP Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġpresenter Type . canonical Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Local Ġand Ġanonymous Ġclasses Ġcan Ġnot Ġbe ĠPresent ers ") ĊĠĠĠĠĠĠĠ Ġreturn Ġget ("$ DEFAULT _ KEY :$ name ", Ġpresenter Type , Ġview Type , Ġview ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinterface ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< V : ĠM vp View , ĠP Ġ: ĠM vp Presenter < V >> Ġcreate ( presenter Type : ĠClass < P >, Ġview Type : ĠClass < V >, Ġview : ĠV ): ĠP ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠNew Instance Factory Ġ: ĠFactory Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< V : ĠM vp View , ĠP Ġ: ĠM vp Presenter < V >> Ġcreate ( presenter Type : ĠClass < P >, Ġview Type : ĠClass < V >, Ġview : ĠV ): ĠP Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter Type . get Constructor ( view Type ). newInstance ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInstanti ation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Cannot Ġcreate Ġan Ġinstance Ġof Ġ$ presenter Type ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Cannot Ġcreate Ġan Ġinstance Ġof Ġ$ presenter Type ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ KEY Ġ= Ġ" app . jun hy o un gle e . arch roid . runtime . core . presenter . Presenter Provider . DEFAULT _ KEY " ĊĠĠĠ Ġ} Ċ }