/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 5 ĠGoogle ĠInc . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* Ġ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ ĊĊ Ċ package Ġcom . task ail . google places search dialog Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . support . v 7 . widget . RecyclerView Ċ import Ġandroid . text . style . Style Span Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Filter Ċ import Ġandroid . widget . Filter able Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . gms . common . api . Google ApiClient Ċ import Ġcom . google . android . gms . common . api . Pending Result Ċ import Ġcom . google . android . gms . common . data . Data Buffer Utils Ċ import Ġcom . google . android . gms . location . places . Autocomplete Filter Ċ import Ġcom . google . android . gms . location . places . Autocomplete Prediction Ċ import Ġcom . google . android . gms . location . places . Place Buffer Ċ import Ġcom . google . android . gms . location . places . Places Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġjava . util . ArrayList Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠAdapter Ġthat Ġhandles ĠAuto complete Ġrequests Ġfrom Ġthe ĠPl aces ĠGeo ĠData ĠAPI . Ċ Ġ* Ġ{@ link ĠAuto complete Prediction } Ġresults Ġfrom Ġthe ĠAPI Ġare Ġfrozen Ġand Ġstored Ġdirectly Ġin Ġthis Ċ Ġ* Ġadapter . Ġ( See Ġ{@ link ĠAuto complete Prediction # freeze ()}. ) Ċ Ġ* Ġ< p > Ċ Ġ* ĠNote Ġthat Ġthis Ġadapter Ġrequires Ġa Ġvalid Ġ{@ link Ġcom . google . android . gms . common . api . Google ApiClient }. Ċ Ġ* ĠThe ĠAPI Ġclient Ġmust Ġbe Ġmaintained Ġin Ġthe Ġencaps ulating ĠActivity , Ġincluding Ġall Ġlifecycle Ġand Ċ Ġ* Ġconnection Ġstates . ĠThe ĠAPI Ġclient Ġmust Ġbe Ġconnected Ġwith Ġthe Ġ{@ link ĠPl aces # GEO _ DATA _ API } ĠAPI . Ċ Ġ*/ Ċ class ĠPlace Autocomplete Adapter ( private Ġval Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġgoogle ApiClient : ĠGoogle ApiClient , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlat Lng Bounds : ĠLat Lng Bounds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcallback : ĠPlace Callback , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġ Ġm Place Filter : ĠAuto complete Filter ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . Adapter < Place Autocomplete Adapter . Places ViewHolder >(), ĠFilter able Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Place Auto Adapter " ĊĠĠĠ Ġprivate Ġval ĠSTYLE _ BOLD Ġ= ĠStyle Span ( Type face . BOLD ) ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCurrent Ġresults Ġreturned Ġby Ġthis Ġadapter . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Result List : ĠArrayList < Autocomplete Prediction >? Ġ= Ġnull ĊĊĠĠĠ Ġclass ĠPl aces ViewHolder ( item View : ĠView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback : ĠPlace Callback , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgoogle ApiClient : ĠGoogle ApiClient ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( item View ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġprimary Text Ġ= ĠitemView . root View . findViewById < TextView >( R . id . text 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġsecondary Text Ġ= ĠitemView . root View . findViewById < TextView >( R . id . text 2 ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġset Place ( primary : ĠString , Ġsecondary : ĠString , Ġplace Id : ĠString ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Text . text Ġ= Ġprimary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecondary Text . text Ġ= Ġsecondary ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget LatLng ( place Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget LatLng ( place Id : ĠString ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace Buffer Results Ġ: ĠPending Result < Place Buffer > Ġ= ĠPl aces . Geo Data Api ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Place ById ( google ApiClient , Ġplace Id ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplace Buffer Results . set Result Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . count Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Place Selected ( it [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onError () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup ?, Ġview Type : ĠInt ): ĠPlace Autocomplete Adapter . Places ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠitemView Ġ= ĠLayoutInflater . from ( parent ?. context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . custom _ exp ad able _ list _ item , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPlace Autocomplete Adapter . Places ViewHolder ( item View , Ġcallback , Ġgoogle ApiClient ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠPlace Autocomplete Adapter . Places ViewHolder ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġholder ?. set Place ( get Primary Text ( position ), Ġget Secondary Text ( position ), Ġget Place Id ( position )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Primary Text ( position : ĠInt ) Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġreturn Ġm Result List ! ![ position ]. get Primary Text ( STYLE _ BOLD ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Secondary Text ( position : ĠInt ) Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġreturn Ġm Result List ! ![ position ]. get Secondary Text ( STYLE _ BOLD ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Place Id ( position : ĠInt ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠ Ġreturn Ġm Result List ! ![ position ]. place Id !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Result List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Result List ?. size !! ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġfilter Ġfor Ġthe Ġcurrent Ġset Ġof Ġautocomplete Ġresults . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġget Filter (): ĠFilter Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠFilter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform Filtering ( constraint : ĠCharSequence ?): ĠFilter . Filter Results Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Loading ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠFilter . Filter Results () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġthe Ġautocomplete Ġquery Ġif Ġno Ġconstraints Ġare Ġgiven . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( constraint Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠQuery Ġthe Ġautocomplete ĠAPI Ġfor Ġthe Ġ( constraint ) Ġsearch Ġstring . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Result List Ġ= Ġget Autocomplete ( constraint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Result List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠAPI Ġsuccessfully Ġreturned Ġresults . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . values Ġ= Ġm Result List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . count Ġ= Ġm Result List !!. size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpublish Results ( constraint : ĠCharSequence , Ġresults : ĠFilter . Filter Results ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results Ġ!= Ġnull Ġ&& Ġresults . count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠAPI Ġreturned Ġat Ġleast Ġone Ġresult , Ġupdate Ġthe Ġdata . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . results Returned () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe ĠAPI Ġdid Ġnot Ġreturn Ġany Ġresults , Ġinvalidate Ġthe Ġdata Ġset . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on No Results Returned () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Loading ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert Result ToString ( result Value : ĠAny ): ĠCharSequence Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOverride Ġthis Ġmethod Ġto Ġdisplay Ġa Ġreadable Ġresult Ġin Ġthe ĠAuto complete TextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwhen Ġclicked . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result Value Ġis ĠAuto complete Prediction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Value . getFull Text ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . convert Result ToString ( result Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSubmit s Ġan Ġautocomplete Ġquery Ġto Ġthe ĠPl aces ĠGeo ĠData ĠAuto complete ĠAPI . ĊĠĠĠĠ Ġ* ĠResults Ġare Ġreturned Ġas Ġfrozen ĠAuto complete Prediction Ġobjects , Ġready Ġto Ġbe Ġcached . ĊĠĠĠĠ Ġ* Ġobjects Ġto Ġstore Ġthe ĠPlace ĠID Ġand Ġdescription Ġthat Ġthe ĠAPI Ġreturns . ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġempty Ġlist Ġif Ġno Ġresults Ġwere Ġfound . ĊĠĠĠĠ Ġ* ĠReturns Ġnull Ġif Ġthe ĠAPI Ġclient Ġis Ġnot Ġavailable Ġor Ġthe Ġquery Ġdid Ġnot Ġcomplete ĊĠĠĠĠ Ġ* Ġsuccessfully . ĊĠĠĠĠ Ġ* ĠThis Ġmethod ĠMUST Ġbe Ġcalled Ġoff Ġthe Ġmain ĠUI Ġthread , Ġas Ġit Ġwill Ġblock Ġuntil Ġdata Ġis Ġreturned ĊĠĠĠĠ Ġ* Ġfrom Ġthe ĠAPI , Ġwhich Ġmay Ġinclude Ġa Ġnetwork Ġrequest . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġconstraint ĠAuto complete Ġquery Ġstring ĊĠĠĠĠ Ġ* Ġ@ return ĠResults Ġfrom Ġthe Ġautocomplete ĠAPI Ġor Ġnull Ġif Ġthe Ġquery Ġwas Ġnot Ġsuccessful . ĊĠĠĠĠ Ġ* Ġ@ see ĠPl aces . GEO _ DATA _ API . get Autocomplete ĊĠĠĠĠ Ġ* Ġ@ see ĠAuto complete Prediction . freeze ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Autocomplete ( constraint : ĠCharSequence ): ĠArrayList < Autocomplete Prediction >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( google ApiClient . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Starting Ġautocomplete Ġquery Ġfor : Ġ" Ġ+ Ġconstraint ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSubmit Ġthe Ġquery Ġto Ġthe Ġautocomplete ĠAPI Ġand Ġretrieve Ġa ĠPending Result Ġthat Ġwill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontain Ġthe Ġresults Ġwhen Ġthe Ġquery Ġcompletes . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠPl aces . Geo Data Api ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Autocomplete Pred i ctions ( google ApiClient , Ġconstraint . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Lng Bounds , Ġm Place Filter ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġmethod Ġshould Ġhave Ġbeen Ġcalled Ġoff Ġthe Ġmain ĠUI Ġthread . ĠBlock Ġand Ġwait Ġfor Ġat Ġmost Ġ 6 0 s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġa Ġresult Ġfrom Ġthe ĠAPI . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġautocomplete Pred i ctions Ġ= Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await ( 6 0 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthat Ġthe Ġquery Ġcompleted Ġsuccessfully , Ġotherwise Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġautocomplete Pred i ctions . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Error Ġcontact ing ĠAPI : Ġ" Ġ+ Ġstatus . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġgetting Ġautocomplete Ġprediction ĠAPI Ġcall : Ġ" Ġ+ Ġstatus . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġautocomplete Pred i ctions . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Query Ġcompleted . ĠReceived Ġ" Ġ+ Ġautocomplete Pred i ctions . count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" Ġpredictions .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFree ze Ġthe Ġresults Ġimmutable Ġrepresentation Ġthat Ġcan Ġbe Ġstored Ġsafely . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠData Buffer Utils . freeze And Close ( autocomplete Pred i ctions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Google ĠAPI Ġclient Ġis Ġnot Ġconnected Ġfor Ġautocomplete Ġquery .") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }