package Ġcom . github . urm ich m . di ana . place search Ċ Ċ import Ġcom . github . urm ich m . di ana .* Ċ import Ġcom . github . urm ich m . di ana . containers . Places Near by Search Container Ċ import Ġcom . github . urm ich m . di ana . network . Network Ċ import Ġcom . github . urm ich m . di ana . to Request String Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . libraries . places . api . model . Place Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġkotlin . Exception ĊĊ Ċ /** Ċ Ġ* ĠN ear by ĠSearch ĠGoogle ĠAPI Ċ Ġ* Ġ@ details Ġhttps :// developers . google . com / maps / documentation / places / web - service / search - near by Ċ Ġ* Ġ@ param Ġbuilder ĠThe Ġ[ Builder ] Ġobject Ċ Ġ* Ġ*/ Ċ class ĠN ear by Search Ġprivate Ġconstructor ( private Ġval Ġbuilder Ġ: ĠBuilder ){ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ[ D iana ] Ġobject Ġwith Ġgeneral Ġsettings ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġdi ana Ġ: ĠD iana Ġ= Ġbuilder . di ana ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ĠThe Ġrequired Ġparameter . ĊĠĠĠĠ Ġ* Ġ ĠThe Ġ[ LatLng ] Ġobject Ġdescribing Ġlatitude / longitude Ġaround Ġwhich Ġto Ġretrieve Ġplace Ġinformation . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlocation Ġ: LatLng Ġ= Ġbuilder . location ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġtext Ġstring Ġon Ġwhich Ġto Ġsearch , Ġfor Ġexample : Ġ" restaurant " Ġor Ġ" 1 2 3 ĠMain ĠStreet ". ĊĠĠĠĠ Ġ* ĠThis Ġmust Ġbe Ġa Ġplace Ġname , Ġaddress , Ġor Ġcategory Ġof Ġestablish ments . ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġparameter Ġis Ġomitted , Ġplaces Ġwith Ġa Ġbusiness _ status Ġof ĠCLO SED _ TEMP OR AR IL Y Ġor ĠCLO SED _ PER MAN ENT LY Ġwill Ġnot Ġbe Ġreturned . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġkeyword Ġ: String ? Ġ= Ġbuilder . keyword ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġlanguage Ġin Ġwhich Ġto Ġreturn Ġresults . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlanguage Ġ: String ? Ġ= Ġbuilder . language ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe strict s Ġresults Ġto Ġonly Ġthose Ġplaces Ġwithin Ġthe Ġspecified Ġrange . ĊĠĠĠĠ Ġ* ĠValid Ġvalues Ġrange Ġbetween Ġ 0 Ġ( most Ġaff ord able ) Ġto Ġ 4 Ġ( most Ġexpensive ), Ġinclusive . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmax Price Ġ: Int ? Ġ= Ġbuilder . max Price ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe strict s Ġresults Ġto Ġonly Ġthose Ġplaces Ġwithin Ġthe Ġspecified Ġrange . ĊĠĠĠĠ Ġ* ĠValid Ġvalues Ġrange Ġbetween Ġ 0 Ġ( most Ġaff ord able ) Ġto Ġ 4 Ġ( most Ġexpensive ), Ġinclusive . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġmin Price Ġ: Int ? Ġ= Ġbuilder . min Price ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġonly Ġthose Ġplaces Ġthat Ġare Ġopen Ġfor Ġbusiness Ġat Ġthe Ġtime Ġthe Ġquery Ġis Ġsent . ĊĠĠĠĠ Ġ* ĠPl aces Ġthat Ġdo Ġnot Ġspecify Ġopening Ġhours Ġin Ġthe ĠGoogle ĠPl aces Ġdatabase Ġwill Ġnot Ġbe Ġreturned Ġif Ġyou Ġinclude Ġthis Ġparameter Ġin Ġyour Ġquery . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġopen Now Ġ: Boolean ? Ġ= Ġbuilder . open Now ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġup Ġto Ġ 2 0 Ġresults Ġfrom Ġa Ġpreviously Ġrun Ġsearch . ĊĠĠĠĠ Ġ* ĠSetting Ġa Ġpa get o ken Ġparameter Ġwill Ġexecute Ġa Ġsearch Ġwith Ġthe Ġsame Ġparameters Ġused Ġpreviously ĠâĢĶ Ġall Ġparameters Ġother Ġthan Ġpa get o ken Ġwill Ġbe Ġignored . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġpage Token Ġ: String ? Ġ= Ġbuilder . page Token ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDefines Ġthe Ġdistance Ġ( in Ġmeters ) Ġwithin Ġwhich Ġto Ġreturn Ġplace Ġresults . ĊĠĠĠĠ Ġ* ĠNote Ġthat Ġradius Ġmust Ġnot Ġbe Ġincluded Ġif Ġ[ rank By ]= distance Ġ( described Ġunder ĠOptional Ġparameters Ġbelow ) Ġis Ġspecified . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġradius Ġ: Int ? Ġ= Ġbuilder . radius ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSpecifies Ġthe Ġorder Ġin Ġwhich Ġresults Ġare Ġlisted ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġrank By Ġ: D iana . Rank by Ġ= Ġbuilder . rank By ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe strict s Ġthe Ġresults Ġto Ġplaces Ġmatching Ġthe Ġspecified Ġtype . ĠOnly Ġone Ġtype Ġmay Ġbe Ġspecified . ĊĠĠĠĠ Ġ* ĠIf Ġmore Ġthan Ġone Ġtype Ġis Ġprovided , Ġall Ġtypes Ġfollowing Ġthe Ġfirst Ġentry Ġare Ġignored . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġtype Ġ: ĠPlace . Type ? Ġ= Ġbuilder . type ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġbuilder Ġclass Ġfor Ġ[ Near by Search ] Ġclass ĊĠĠĠĠ Ġ* Ġ@ param Ġdi ana Ġ[ D iana ] Ġobject Ġwith Ġgeneral Ġsettings ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġclass ĠBuilder ( val Ġdi ana Ġ: ĠD iana ){ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠThe Ġrequired Ġparameter . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠThe Ġ[ LatLng ] Ġobject Ġdescribing Ġlatitude / longitude Ġaround Ġwhich Ġto Ġretrieve Ġplace Ġinformation . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġlocation Ġ: ĠLat Lng ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġtext Ġstring Ġon Ġwhich Ġto Ġsearch , Ġfor Ġexample : Ġ" restaurant " Ġor Ġ" 1 2 3 ĠMain ĠStreet ". ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġmust Ġbe Ġa Ġplace Ġname , Ġaddress , Ġor Ġcategory Ġof Ġestablish ments . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġthis Ġparameter Ġis Ġomitted , Ġplaces Ġwith Ġa Ġbusiness _ status Ġof ĠCLO SED _ TEMP OR AR IL Y Ġor ĠCLO SED _ PER MAN ENT LY Ġwill Ġnot Ġbe Ġreturned . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġkeyword Ġ: String ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġlanguage Ġin Ġwhich Ġto Ġreturn Ġresults . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġlanguage Ġ: String ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe strict s Ġresults Ġto Ġonly Ġthose Ġplaces Ġwithin Ġthe Ġspecified Ġrange . ĊĠĠĠĠĠĠĠĠ Ġ* ĠValid Ġvalues Ġrange Ġbetween Ġ 0 Ġ( most Ġaff ord able ) Ġto Ġ 4 Ġ( most Ġexpensive ), Ġinclusive . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġmax Price Ġ: Int ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe strict s Ġresults Ġto Ġonly Ġthose Ġplaces Ġwithin Ġthe Ġspecified Ġrange . ĊĠĠĠĠĠĠĠĠ Ġ* ĠValid Ġvalues Ġrange Ġbetween Ġ 0 Ġ( most Ġaff ord able ) Ġto Ġ 4 Ġ( most Ġexpensive ), Ġinclusive . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġmin Price Ġ: Int ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġonly Ġthose Ġplaces Ġthat Ġare Ġopen Ġfor Ġbusiness Ġat Ġthe Ġtime Ġthe Ġquery Ġis Ġsent . ĊĠĠĠĠĠĠĠĠ Ġ* ĠPl aces Ġthat Ġdo Ġnot Ġspecify Ġopening Ġhours Ġin Ġthe ĠGoogle ĠPl aces Ġdatabase Ġwill Ġnot Ġbe Ġreturned Ġif Ġyou Ġinclude Ġthis Ġparameter Ġin Ġyour Ġquery . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġopen Now Ġ: Boolean ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReturns Ġup Ġto Ġ 2 0 Ġresults Ġfrom Ġa Ġpreviously Ġrun Ġsearch . ĊĠĠĠĠĠĠĠĠ Ġ* ĠSetting Ġa Ġpa get o ken Ġparameter Ġwill Ġexecute Ġa Ġsearch Ġwith Ġthe Ġsame Ġparameters Ġused Ġpreviously ĠâĢĶ Ġall Ġparameters Ġother Ġthan Ġpa get o ken Ġwill Ġbe Ġignored . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Token Ġ: String ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDefines Ġthe Ġdistance Ġ( in Ġmeters ) Ġwithin Ġwhich Ġto Ġreturn Ġplace Ġresults . ĊĠĠĠĠĠĠĠĠ Ġ* ĠNote Ġthat Ġradius Ġmust Ġnot Ġbe Ġincluded Ġif Ġ[ rank By ]= distance Ġ( described Ġunder ĠOptional Ġparameters Ġbelow ) Ġis Ġspecified . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġradius Ġ: Int ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSpecifies Ġthe Ġorder Ġin Ġwhich Ġresults Ġare Ġlisted ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġrank By Ġ: D iana . Rank by Ġ= ĠD iana . Rank by . PRO MIN ENCE ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRe strict s Ġthe Ġresults Ġto Ġplaces Ġmatching Ġthe Ġspecified Ġtype . ĠOnly Ġone Ġtype Ġmay Ġbe Ġspecified . ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġmore Ġthan Ġone Ġtype Ġis Ġprovided , Ġall Ġtypes Ġfollowing Ġthe Ġfirst Ġentry Ġare Ġignored . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġvar Ġtype Ġ: ĠPlace . Type ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġbuild Ġmethod Ġto Ġcreate Ġa Ġ[ Near by Search ] Ġobject ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ[ Near by Search ] Ġobject Ġcreated Ġaccording Ġto Ġthe Ġbuilder Ġsettings . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbuild () Ġ: ĠN ear by Search Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠN ear by Search ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġa Ġcall Ġto ĠN ear by ĠSearch . ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Places Near by Search Container ] Ġcontainer Ġobject Ġon Ġsuccess , Ġnull Ġotherwise ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcall () Ġ: ĠPl aces Near by Search Container ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġvalidate () ĊĠĠĠĠĠĠĠ Ġif (! message . isValid ) Ġ Ġthrow ĠException ( message . message ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnearby : ĠDeferred < Places Near by Search Container > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork . di ana . near by Search ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġdi ana . key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ= Ġlocation . to Request String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Ġ= Ġkeyword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġlanguage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Price Ġ= Ġmax Price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Price Ġ= Ġmin Price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Now Ġ= Ġopen Now , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Token Ġ= Ġpage Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradius Ġ= Ġradius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrank By Ġ= Ġrank By . name . lowercase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġnearby . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Exception : Ġ$ e "); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠValidate Ġparameters Ġbefore Ġcalling Ġthe Ġserver ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġ[ Message ] Ġobject Ġbased Ġon n Ġthe Ġvalidation . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġvalidate () Ġ: Message { ĊĠĠĠĠĠĠĠ Ġmin Price ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġprice NotIn Range ( this ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage (" min Price Ġis Ġout Ġof Ġpossible Ġrange .", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmax Price ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Ġprice NotIn Range ( this ) Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage (" max Price Ġis Ġout Ġof Ġpossible Ġrange .", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen ( rank By ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD iana . Rank by . PRO MIN ENCE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( radius Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" When Ġprom in ence Ġis Ġspecified , Ġthe Ġradius Ġparameter Ġis Ġrequired .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD iana . Rank by . DISTANCE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( radius Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" When Ġusing Ġrank By = distance , Ġthe Ġradius Ġparameter Ġwill Ġnot Ġbe Ġaccepted , Ġand Ġwill Ġresult Ġin Ġan ĠINVALID _ REQUEST .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMessage (" OK ", Ġtrue ) ĊĠĠĠ Ġ} ĊĊĊĊ Ċ }