package Ġmo e . ba ih um aru . android . plugin Ċ Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcommon s . android . arch . offline . refresh . Refresh Delegate Ċ import Ġcommon s . android . d agger . Application Scope Ċ import Ġmo e . ba ih um aru . core . Plugin Ċ import Ġmo e . ba ih um aru . plugin . w ux i aw orld . W ux ia World Plugin Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . inject . Inject Ċ Ċ @ Worker Thread Ċ @ Application Scope Ċ class ĠPlugin Manager Ġ@ Inject Ġconstructor ( private Ġval Ġplugin Loader : ĠPlugin Loader , Ġprivate Ġval Ġclient : ĠOk HttpClient ) Ġ{ ĊĊĠ Ġprivate Ġval Ġplugins Ġ= Ġmutable Map Of < String , ĠPlugin >() ĊĊĠ Ġinit Ġ{ ĊĠĠĠ ĠW ux ia World Plugin (). apply Ġ{ ĊĠĠĠĠĠ Ġplugins [ id ] Ġ= Ġthis ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġrefresh Delegate Ġ= ĠRefresh Delegate ( 1 0 , ĠTimeUnit . MIN UTES ) ĊĊĠ Ġfun Ġplugin List (): ĠList < Plugin > Ġ{ ĊĠĠĠ Ġif Ġ( refresh Delegate . should Refresh ()) Ġ{ ĊĠĠĠĠĠ Ġreload () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġplugins . values . toList () ĊĠ Ġ} ĊĊĠ Ġfun Ġretrieve ( plugin Id : ĠString ): ĠPlugin Ġ{ ĊĠĠĠ Ġif Ġ( refresh Delegate . should Refresh ()) Ġ{ ĊĠĠĠĠĠ Ġreload () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġplugins [ plugin Id ] Ġ?: Ġthrow ĠIllegalStateException (" Plugin Ġ[$ plugin Id ] Ġis Ġnot Ġavailable ") ĊĠ Ġ} ĊĊĠ Ġfun Ġreload () Ġ{ ĊĠĠĠ Ġplugin Loader . load (). map Ġ{ Ġplugin Ġ-> ĊĠĠĠĠĠ Ġplugins [ plugin . id ] Ġ= Ġplugin ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġplugins . map Ġ{ Ġ(_, Ġplugin ) Ġ-> ĊĠĠĠĠĠ Ġplugin . inject Ok HttpClient ( client ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġrefresh Delegate . update Last Refresh () ĊĠ Ġ} Ċ }