package Ġcom . sch ib st ed sp ain . le ku . geo coder . places Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . location . Address Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġcom . google . android . gms . tasks . Runtime ExecutionException Ċ import Ġcom . google . android . gms . tasks . Tasks Ċ import Ġcom . google . android . libraries . places . api . model . Autocomplete Session Token Ċ import Ġcom . google . android . libraries . places . api . model . Place Ċ import Ġcom . google . android . libraries . places . api . model . Rect angular Bounds Ċ import Ġcom . google . android . libraries . places . api . model . Type Filter Ċ import Ġcom . google . android . libraries . places . api . net . Fetch Place Request Ċ import Ġcom . google . android . libraries . places . api . net . Find Autocomplete Pred i ctions Request Ċ import Ġcom . google . android . libraries . places . api . net . Places Client Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Observable . defer Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . Locale Ċ import Ġjava . util . concurrent . ExecutionException Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeoutException Ċ import Ġcom . google . android . libraries . places . api . net . Find Autocomplete Pred i ctions Response Ċ Ċ private Ġconst Ġval ĠPRE DI CTION S _ WAIT ING _ TIME : ĠLong Ġ= Ġ 6 Ċ private Ġconst Ġval ĠPL ACE _ BY _ ID _ WAIT ING _ TIME : ĠLong Ġ= Ġ 3 Ċ Ċ class ĠGoogle Places DataSource ( private Ġval Ġgeo Data Client : ĠPl aces Client ) Ġ{ ĊĊĠĠĠ Ġfun Ġget From Location Name ( query : ĠString , Ġlat Lng Bounds : ĠLat Lng Bounds ): ĠObservable < List < Address >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdefer Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠAuto complete Session Token . newInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= ĠRect angular Bounds . newInstance ( lat Lng Bounds . sout hw est , Ġlat Lng Bounds . northeast ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠFind Autocomplete Pred i ctions Request . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setLocation Bias ( bounds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setType Filter ( Type Filter . ADDRESS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Session Token ( token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Query ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġgeo Data Client . find Autocomplete Pred i ctions ( request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks . await ( results , ĠPRE DI CTION S _ WAIT ING _ TIME , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġautocomplete Pred i ctions Ġ= Ġresults . result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress List Ġ= Ġget Address List From Prediction ( autocomplete Pred i ctions !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ defer ĠObservable . just ( address List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntime ExecutionException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ defer ĠObservable . just ( ArrayList < Address >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Address List From Prediction ( prediction List : ĠFind Autocomplete Pred i ctions Response ): ĠList < Address > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaddress List Ġ= ĠArrayList < Address >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( prediction Ġin Ġprediction List . autocomplete Pred i ctions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Buffer Response Task Ġ= Ġgeo Data Client . fetch Place ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFetch Place Request . newInstance ( prediction . place Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Place . Field . ADDRESS , ĠPlace . Field . ID , ĠPlace . Field . LAT _ L NG , ĠPlace . Field . NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTasks . await ( place Buffer Response Task , ĠPL ACE _ BY _ ID _ WAIT ING _ TIME , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠExecution Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠTimeout Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Buffer Response Ġ= Ġplace Buffer Response Task . result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") Ġval Ġplace Ġ= Ġplace Buffer Response !!. place ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddress List . add ( map Place To Address ( place )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġaddress List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmap Place To Address ( place : Ġcom . google . android . libraries . places . api . model . Place ): ĠAddress Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= ĠAddress ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġaddress . latitude Ġ= Ġplace . lat Lng ?. latitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġaddress . longitude Ġ= Ġplace . lat Lng ?. longitude Ġ?: Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġaddress Name Ġ= Ġplace . name . toString () Ġ+ Ġ" Ġ- Ġ" Ġ+ Ġplace . address !!. toString () ĊĠĠĠĠĠĠĠ Ġaddress . set Address Line ( 0 , Ġaddress Name ) ĊĠĠĠĠĠĠĠ Ġaddress . feature Name Ġ= Ġaddress Name ĊĠĠĠĠĠĠĠ Ġreturn Ġaddress ĊĠĠĠ Ġ} Ċ } Ċ