package Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . di . component Ċ Ċ import Ġandroid . content . Context Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . Activity Base Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . db . App Database Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . di . module .* Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . ui . presenter . File Browse Activity Presenter Impl Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . ui . presenter . Player Activity Presenter Impl Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . ui . presenter . Settings Activity Presenter Impl Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . use case . Notification UseCase Ċ import Ġjp . gr . java _ conf . mm k tom ato . fl uff y player . use case . Sc ro bble UseCase Ċ import Ġkotlinx . coroutines . experimental . async Ċ Ċ /** Ċ Ġ* ĠInject s Ġde ped encies . Ċ Ġ*/ Ċ abstract Ġclass ĠComponent Injector Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġthe ĠDatabase Component . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġdb Component : ĠDatabase Component ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġthe ĠSc ro bble Component . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġsc ro bble Component : ĠSc ro bble Component ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġto ĠActivity Base . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Base Ġthe Ġinstance Ġto Ġinject Ġdependencies . ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġinject ( activity Base : ĠActivity Base , Ġctx : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger Activity Base Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shared Prefs Module ( Shared Prefs Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. db x Module ( Db x Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( activity Base ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġto ĠFile Browse Activity Presenter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpresenter Ġthe Ġinstance Ġto Ġinject Ġdependencies . ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġinject ( presenter : ĠFile Browse Activity Presenter Impl , Ġctx : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger Activity Presenter Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shared Prefs Module ( Shared Prefs Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. db x Module ( Db x Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( presenter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġto ĠPlayer Activity Presenter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpresenter Ġthe Ġinstance Ġto Ġinject Ġdependencies . ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġsuspend Ġfun Ġinject ( presenter : ĠPlayer Activity Presenter Impl , Ġctx : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger Activity Presenter Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shared Prefs Module ( Shared Prefs Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. db x Module ( Db x Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( presenter ) ĊĊĠĠĠĠĠĠĠ Ġpresenter . db Ġ= Ġcreate App Database ( ctx ) ĊĠĠĠĠĠĠĠ Ġpresenter . notification UseCase Ġ= Ġcreate Notification UseCase ( ctx ) ĊĠĠĠĠĠĠĠ Ġpresenter . sc ro bble UseCase Ġ= Ġcreate Sc ro bble UseCase ( ctx ). await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject Ġto ĠSettings Activity Presenter . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpresenter Ġthe Ġinstance Ġto Ġinject Ġdependencies . ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġinject ( presenter : ĠSettings Activity Presenter Impl , Ġctx : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠD agger Activity Presenter Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shared Prefs Module ( Shared Prefs Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. db x Module ( Db x Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inject ( presenter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġinstance Ġof ĠApp Database . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate App Database ( ctx : ĠContext ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! :: db Component . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Component Ġ= ĠD agger Database Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. database Module ( Database Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdb Component . create App Database () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġinstance Ġof ĠNotification UseCase . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate Notification UseCase ( ctx : ĠContext ): ĠNotification UseCase Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠD agger Notification Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. notification Module ( Notification Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Notification UseCase () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġinstance Ġof ĠSc ro bble Component . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġctx Ġandroid 's ĠContext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġcreate Sc ro bble UseCase ( ctx : ĠContext ) Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn @ async Ġif Ġ(:: sc ro bble Component . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsc ro bble Component . create Sc ro bble UseCase () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= ĠD agger Sc ro bble Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. app Module ( App Module ( ctx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. shared Prefs Module ( Shared Prefs Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sc ro bble Module ( Sc ro bble Module ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġcomponent . create Sc ro bble UseCase () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsc ro bble Component Ġ= Ġcomponent Ġ Ġ// Ġmake Ġcomponent Ġsingleton . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġret ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠDependency Injector Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Injector : ĠComponent Injector ĊĊĠĠĠ Ġvar Ġinjector : ĠComponent Injector ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! :: m Injector . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Injector Ġ= Ġobject Ġ: ĠComponent Injector () Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm Injector ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Injector Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ