package Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . api Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Info Ċ import Ġandroid . util . Log Ċ import Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . contract . Collection List Contract Ċ import Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . contract . Custom List Contract Ċ import Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . contract . Product List Contract Ċ import Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . model . Collection Array Ċ import Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . model . Custom Collection Array Ċ import Ġcom . ar au jo . j ordan . shop ify mobile summer challenge 2 0 1 9 . model . Product Array Ċ import Ġokhttp 3 . Cache Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ Ċ /** Ċ Ġ* ĠShop ify API Interactor Ċ Ġ* ĠAPI Ġrequest Ġmanager Ġthat Ġresolves Ġthe ĠRet rofit 2 Ġusage Ċ Ġ* ĠCreated Ġby Ġar au jo j ordan Ġon Ġ 0 8 / 0 1 / 2 0 1 9 . Ċ Ġ*/ Ċ class ĠShop ify API Interactor ( ctx : ĠContext ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠBASE _ URL Ġ= Ġ" https :// shop ic ruit . my shop ify . com / admin /" ĊĠĠĠ Ġprivate Ġvar Ġok HttpClient : ĠOk HttpClient ĊĠĠĠ Ġprivate Ġvar Ġretrofit : ĠRet rofit ĊĠĠĠ Ġprivate Ġvar Ġcustom Col API : ĠCustom Collection Service ĊĠĠĠ Ġprivate Ġvar Ġcol API : ĠCollection Service ĊĠĠĠ Ġprivate Ġvar Ġprod API : ĠProduct Service ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcc View : ĠCustom List Contract . View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcol View : ĠCollection List Contract . View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprod View : ĠProduct List Contract . View ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġok HttpClient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. cache ( Cache ( ctx . cacheDir , Ġ 5 Ġ* Ġ 1 0 2 4 Ġ* Ġ 1 0 2 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Interceptor Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġif Ġ( has Network ( ctx ) !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . newBuilder (). header (" Cache - Control ", Ġ" public , Ġmax - age =" Ġ+ Ġ 5 ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . newBuilder (). header ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cache - Control ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" public , Ġonly - if - cached , Ġmax - st ale =" Ġ+ Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġretrofit Ġ= ĠRet rofit . Builder (). baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( ok HttpClient ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġcustom Col API Ġ= Ġretrofit . create ( Custom Collection Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġcol API Ġ= Ġretrofit . create ( Collection Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġprod API Ġ= Ġretrofit . create ( Product Service :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach Custom Col View ( view : ĠCustom List Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . cc View Ġ= Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach Col View ( view : ĠCollection List Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . col View Ġ= Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach Prod View ( view : ĠProduct List Contract . View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . prod View Ġ= Ġview ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRequest ĠCustom ĠCollections Ġwith Ġpagination ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfetch Custom Collections ( page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" REQUEST ", Ġ" fetch Custom Collections () ") ĊĠĠĠĠĠĠĠ Ġcc View . show Loading ( true ) ĊĠĠĠĠĠĠĠ Ġcustom Col API . fetch Col ( page ). enqueue ( object Ġ: ĠCallback < Custom Collection Array > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Custom Collection Array >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CC Interactor ", Ġ" fetch CC () Ġon Failure () Ġ" Ġ+ Ġt . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc View . show ErrorMessage (" Error Ġto Ġretrieve ĠCustom ĠCollection ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Custom Collection Array >, Ġresponse : ĠResponse < Custom Collection Array >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" CC Interactor ", Ġ" fetch CC () Ġon Response () Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Arr List Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc View . fetch Cust Col Success ( col Arr List ?. custom _ collections ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcc View . show ErrorMessage (" Error Ġto Ġretrieve ĠCustom ĠCollection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" CC Interactor ", Ġ" fetch CC () Ġon Response () Ġ" Ġ+ Ġresponse . raw ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFetch ĠCollections Ġlist Ġfrom Ġthe Ġgiven ĠCollection ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfetch Collections ( page : ĠInt , Ġcol Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" REQUEST ", Ġ" fetch Collections () ") ĊĠĠĠĠĠĠĠ Ġcol API . fetch Col Prod ( page , Ġcol Id ). enqueue ( object Ġ: ĠCallback < Collection Array > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Collection Array >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" C Interactor ", Ġ" fetch Col () Ġon Failure () Ġ" Ġ+ Ġt . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol View . show ErrorMessage (" Error Ġto Ġretrieve ĠCollection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Collection Array >, Ġresponse : ĠResponse < Collection Array >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" C Interactor ", Ġ" fetch Col () Ġon Response () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Arr List Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol View . fetch Col Success ( col Arr List ?. collect s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol View . show ErrorMessage (" Error Ġto Ġretrieve ĠCollection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" C Interactor ", Ġ" fetch Col () Ġon Response () Ġ" Ġ+ Ġresponse . raw ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFetch ĠProducts Ġlist Ġfrom Ġthe Ġgiven Ġproducts ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfetch Products ( page : ĠInt , Ġprod Ids Arr : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" REQUEST ", Ġ" fetch Products () ") ĊĠĠĠĠĠĠĠ Ġprod API . fetch Prod ( page , Ġprod Ids Arr ). enqueue ( object Ġ: ĠCallback < Product Array > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Product Array >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" P Interactor ", Ġ" fetch Col () Ġon Failure () Ġ" Ġ+ Ġt . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprod View . show ErrorMessage (" Error Ġto Ġretrieve ĠCollection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprod View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Product Array >, Ġresponse : ĠResponse < Product Array >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" P Interactor ", Ġ" fetch Col () Ġon Response () ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Arr List Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprod View . fetch Products Success ( col Arr List ?. products ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprod View . show ErrorMessage (" Error Ġto Ġretrieve ĠCollection ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" P Interactor ", Ġ" fetch Col () Ġon Response () Ġ" Ġ+ Ġresponse . raw ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprod View . show Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Network ( context : ĠContext ): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Connected : ĠBoolean ? Ġ= Ġfalse Ġ// ĠInitial ĠValue ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġactive Network : ĠNetwork Info ? Ġ= Ġconnectivity Manager . active Network Info ĊĠĠĠĠĠĠĠ Ġif Ġ( active Network Ġ!= Ġnull Ġ&& Ġactive Network . isConnected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Connected Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġis Connected ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ