package Ġcom . example . my application . api Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġcom . example . my application . common . TIMEOUT Ċ import Ġcom . example . my application . common . URL _ GET _ REC ENT Ċ import Ġcom . example . my application . common . URL _ SEARCH Ċ import Ġcom . example . my application . model . Photos Response Ċ import Ġcom . example . my application . model . Result Ċ import Ġcom . example . my application . model . repository . Photos Repository Impl Ċ import Ġcom . example . my application . parser . Search Images Api JSONParser Ċ import Ġorg . json . JSONException Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ Ċ object ĠApi Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġjson Parser : ĠSearch Images Api JSONParser Ġ= ĠSearch Images Api JSONParser () ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġfetch Photos ( search Text : ĠString , Ġpage No : ĠInt ): ĠResult < Exception , ĠPh otos Response ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . build Ġ{ Ġjson Parser . parse Search ListResponse ( fetch Photos Info ( search Text , Ġpage No )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Worker Thread ĊĠĠĠ Ġfun Ġget Bitmap ( url : ĠString ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠimageUrl Ġ= ĠURL ( url ) ĊĠĠĠĠĠĠĠ Ġval Ġconn Ġ= ĠimageUrl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġconn . request Method Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠ Ġval Ġbm Options Ġ= ĠBitmap Factory . Options () ĊĠĠĠĠĠĠĠ Ġbm Options . in Sample Size Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconn . connect Timeout Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠ Ġconn . read Timeout Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠ Ġconn . instance Follow Redirect s Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġconn . do Input Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġconn . connect () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBitmap Factory . decode Stream ( conn . inputStream , Ġnull , Ġbm Options ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . inputStream . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( JSONException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġfetch Photos Info ( search Query : ĠString , Ġpage No : ĠInt ): ĠJSONObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( search Query )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL ("$ URL _ GET _ REC ENT & page =$ page No ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL ("$ URL _ SEARCH & text =$ search Query & page =$ page No ") ĊĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġconn . connect Timeout Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠ Ġconn . read Timeout Ġ= ĠTIME OUT ĊĠĠĠĠĠĠĠ Ġconn . request Method Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠBuffered InputStream ( conn . inputStream ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠinputStream . buffered Reader (). use ( BufferedReader :: read Text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( Photos Repository Impl . Get Images AsyncTask :: class . java . name , Ġ" REQUEST Ġresult Ġ= Ġ$ result ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJSONObject ( result ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠJSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconn . disconnect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }