package Ġcom . br ais gab in . inter view . new ste ch Ċ Ċ import Ġandroid . os . Looper Ċ import Ġcom . br ais gab in . inter view . new ste ch . home . data . Data Repository Ċ import Ġcom . br ais gab in . inter view . new ste ch . home . data . Photo Mapper Ċ import Ġcom . br ais gab in . inter view . new ste ch . home . data . RestApi Ċ import Ġcom . br ais gab in . inter view . new ste ch . home . domain . Repository Ċ import Ġcom . br ais gab in . inter view . new ste ch . home . presentation . MainActivity Ċ import Ġcom . squareup . mos hi . Json Adapter Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġdagger . Bind s Ċ import Ġdagger . Bind s Instance Ċ import Ġdagger . Component Ċ import Ġdagger . Lazy Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġdagger . Re usable Ċ import Ġio . reactivex . Scheduler Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ 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 . create Ċ import Ġjavax . inject . Named Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ @ Component ( modules Ġ= Ġ[ App Module :: class ]) Ċ interface ĠApp Component Ġ{ ĊĊĠ Ġ@ Component . Factory ĊĠ Ġinterface ĠFactory Ġ{ ĊĊĠĠĠ Ġfun Ġcreate (@ Bind s Instance Ġ@ Named (" baseUrl ") ĠbaseUrl : ĠString ): ĠApp Component ĊĠ Ġ} ĊĊĠ Ġfun Ġmain Activity Component (): ĠMainActivity . Component . Factory Ċ } Ċ Ċ @ Module Ċ abstract Ġclass ĠApp Module Ġ{ ĊĊĠ Ġ@ Bind s ĊĠ Ġabstract Ġfun Ġrepository Provider ( repository : ĠData Repository ): ĠRepository ĊĊĠ Ġ@ Module ĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Named (" main ") ĊĠĠĠ Ġfun Ġmain Scheduler Provider (): ĠScheduler Ġ= ĠAndroid Schedulers . main Thread () ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġokhttp Provider (): ĠOk HttpClient Ġ{ ĊĠĠĠĠĠ Ġcheck ( Looper . get Main Looper () Ġ!= ĠL ooper . my Looper ()) Ġ{ Ġ" Initializing ĠOk HttpClient Ġon Ġmain Ġthread ." Ġ} ĊĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠOk HttpClient (). newBuilder () ĊĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . add Network Interceptor ( Http Logging Interceptor (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= ĠHttp Logging Interceptor . Level . BASIC ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġretrofit Provider ( ĊĠĠĠĠĠ Ġok HttpClient : ĠLazy < Ok HttpClient >, ĊĠĠĠĠĠ Ġ@ Named (" baseUrl ") ĠbaseUrl : ĠString ĊĠĠĠ Ġ): ĠRet rofit Ġ{ ĊĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠ Ġ. baseUrl ( baseUrl ) ĊĠĠĠĠĠĠĠ Ġ. call Factory ( object Ġ: ĠCall . Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnew Call ( request : ĠRequest ): ĠCall Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġok HttpClient . get (). new Call ( request ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ. add Call Adapter Factory ( Rx Java 2 Call Adapter Factory . create With Scheduler ( Schedulers . io ())) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġrest Api Provider ( ret rofit : ĠRet rofit ): ĠRest Api Ġ{ ĊĠĠĠĠĠ Ġreturn Ġretrofit . create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Re usable ĊĠĠĠ Ġfun Ġm oshi Provider (): ĠM oshi Ġ{ ĊĠĠĠĠĠ Ġreturn ĠM oshi . Builder (). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġphoto Json Adapter Provider ( mos hi : ĠM oshi ): ĠJson Adapter < Photo Mapper > Ġ{ ĊĠĠĠĠĠ Ġreturn Ġm oshi . adapter ( Photo Mapper :: class . java ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ