package Ġcom . ah med 3 el sha er . movies de cade . di Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . ah med 3 el sha er . movies de cade . data . Movies Provider Ċ import Ġcom . ah med 3 el sha er . movies de cade . data . Movies Repository Ċ import Ġcom . ah med 3 el sha er . movies de cade . data . room . Movies Dao Ċ import Ġcom . ah med 3 el sha er . movies de cade . data . room . Movies Database Ċ import Ġcom . ah med 3 el sha er . movies de cade . movie detail . Details Action Processor Ċ import Ġcom . ah med 3 el sha er . movies de cade . movies . Movies Action Processor Ċ import Ġcom . ah med 3 el sha er . movies de cade . network . F lick er Api Ċ import Ġcom . ah med 3 el sha er . movies de cade . utils . BASE _ URL Ċ import Ġcom . ah med 3 el sha er . movies de cade . utils . ViewModel Factory Ċ import Ġcom . ah med 3 el sha er . movies de cade . utils . schedul ers . Scheduler Provider Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . adapter . rx java 2 . Rx Java 2 Call Adapter Factory Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ @ Module Ċ class ĠMov ies Application Module () Ġ{ ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide ViewModel Factory ( ĊĠĠĠĠĠĠĠ Ġmovies Action Processor : ĠMov ies Action Processor , ĊĠĠĠĠĠĠĠ ĠDetails Action Processor : ĠDetails Action Processor , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ĊĠĠĠ Ġ): ĠViewModel Factory Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠViewModel Factory ( context , Ġmovies Action Processor , ĠDetails Action Processor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide Movies Action Processor ( ĊĠĠĠĠĠĠĠ Ġrepo : ĠMov ies Repository ĊĠĠĠ Ġ): ĠMov ies Action Processor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMov ies Action Processor ( repo , ĠScheduler Provider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide Details Action Processor ( ĊĠĠĠĠĠĠĠ Ġrepo : ĠMov ies Repository ĊĠĠĠ Ġ): ĠDetails Action Processor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDetails Action Processor ( repo , ĠScheduler Provider ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide Movies Repo ( ĊĠĠĠĠĠĠĠ Ġmovies Dao : ĠMov ies Dao , ĊĠĠĠĠĠĠĠ Ġf lick er Api : ĠF lick er Api , ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext ĊĠĠĠ Ġ): ĠMov ies Repository Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMov ies Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMov ies Provider ( context ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Dao , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf lick er Api ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġmovies Provider ( context : ĠContext ): ĠMov ies Provider Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMov ies Provider ( context ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide Movies Dao ( context : ĠContext ): ĠMov ies Dao Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMov ies Database . getInstance ( context ). movies Dao () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide F lick er Api ( ret rofit : ĠRet rofit ): ĠF lick er Api Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġretrofit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( F lick er Api :: class . java ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide Ret rofit Interface ( client : ĠOk HttpClient ): ĠRet rofit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmo chi Ġ= ĠM oshi Converter Factory . create () ĊĠĠĠĠĠĠĠ Ġmo chi . as Len ient () ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( mo chi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( client ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create With Scheduler ( Schedulers . io ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġinternal Ġfun Ġprovide Ok HttpClient (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠ Ġinterceptor . level Ġ= ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠĠĠĠĠ Ġreturn ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor ( interceptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. connect Timeout ( 4 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. read Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. write Timeout ( 6 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊ Ċ }