package Ġcom . hb . pages . services . api Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . hb . pages . api . ApiResponse Ċ import Ġcom . hb . pages . api . google . Google Books APIClient Ċ import Ġcom . hb . pages . api . google . model . ApiError Ċ import Ġretrofit 2 . await Response Ċ import Ġjava . io . IOException Ċ import Ġjava . net . Http URLConnection Ċ Ċ class ĠBook Search ServiceImpl ( ĊĠĠĠ Ġprivate Ġval Ġgoogle Books APIClient : ĠGoogle Books APIClient Ċ ) Ġ: ĠBook Search Service Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch ( term : ĠString ): ĠApiResponse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgoogle Books APIClient . search ( term , ĠnumberOf Results Ġ= ĠNUMBER _ OF _ RESULTS ). await Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . code () Ġ== ĠHttp URLConnection . HTTP _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Success ( data Ġ= Ġresponse . body ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( this :: class . simple Name , Ġ" Google ĠBooks ĠAPI Ġreturned Ġ${ response . code () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Error ( ApiError . CO ULD _ NOT _ CONNECT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( this :: class . simple Name , Ġ" Call Ġfailed Ġwith Ġexception Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse . Error ( ApiError . CO ULD _ NOT _ CONNECT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNUMBER _ OF _ RESULTS Ġ= Ġ 2 1 ĊĠĠĠ Ġ} Ċ }