package Ġio . eur u app . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . location . Geo coder Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . load . resource . drawable . Drawable Transition Options . with Cross Fade Ċ import Ġio . code labs . util . bind View Ċ import Ġio . code labs . widget . Baseline Grid TextView Ċ import Ġio . code labs . widget . Circular ImageView Ċ import Ġio . eur u app . R Ċ import Ġio . eur u app . model . E uru Search able Item Ċ import Ġio . eur u app . model . User Ċ import Ġio . eur u app . util . Constants Utils Ċ import Ġio . eur u app . util . On Search able ItemClickListener Ċ import Ġio . code labs . sdk . glide . G lide App Ċ import Ġjava . util .* Ċ Ċ class ĠSearch Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġlistener : ĠOn Search able ItemClickListener < E uru Search able Item > Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdataset : ĠMutable List < E uru Search able Item > ĊĠĠĠ Ġprivate Ġval Ġinflater : ĠLayoutInflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠ Ġprivate Ġval Ġgeo coder : ĠGeo coder ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . dataset Ġ= ĠArrayList ( 0 ) ĊĠĠĠĠĠĠĠ Ġthis . geo coder Ġ= ĠGeo coder ( context , ĠLocale . getDefault ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( dataset . isEmpty ()) ĠTYPE _ EMPTY Ġelse ĠTYPE _ ITEM ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ EMPTY Ġ-> Ġreturn ĠEmpty ListView Holder ( in flater . inflate ( R . layout . item _ empty _ query , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTYPE _ ITEM Ġ-> Ġreturn ĠSearch able Item ViewHolder ( in flater . inflate ( R . layout . item _ query , Ġparent , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" No Ġvalid ĠViewHolder Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getItem ViewType ( position ) Ġ== ĠTYPE _ ITEM Ġ&& Ġholder Ġis ĠSearch able Item ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch able Item Ġ= Ġdataset [ position ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( search able Item Ġis ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . username . text Ġ= Ġsearch able Item . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaddress Location Ġ= Ġ" Not Ġfound " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// get Ġthe Ġuser 's Ġlocation Ġfrom Ġthe Ġaddress Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġsearch able Item . address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġgeo coder . get From Location ( address . lat , Ġaddress . lng , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! location . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress Location Ġ= Ġlocation [ 0 ]. getAddress Line ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . address !!. text Ġ= Ġaddress Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġthere Ġis Ġan Ġexception , Ġuse Ġthe Ġdefault Ġdefined Ġtext Ġas Ġthe Ġuser 's Ġcurrent Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants Utils . log Result ( ex . localized Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . address ?. text Ġ= Ġaddress Location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide App . with ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( search able Item . profile ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. circle Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. transition ( with Cross Fade ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( holder . avatar ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Ġclick Ġlistener Ġfor Ġthe Ġview Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOnClickListener Ġ{ Ġv Ġ-> Ġlistener . on Item Clicked ( position , Ġsearch able Item , Ġfalse ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġholder . item View . setOn Long ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Item Clicked ( position , Ġsearch able Item , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( dataset . isEmpty ()) Ġ 1 Ġelse Ġdataset . size ĠĠĠ Ġ/* For Ġthe Ġempty Ġview */ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Add Ġa Ġlist Ġof Ġitems ĊĠĠĠ Ġinternal Ġfun Ġadd And Res ort ( data : ĠList < E uru Search able Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! data . isEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġadd Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdataset . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . name Ġ== Ġdataset [ i ]. name ) Ġadd Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdataset . add ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify Item Range Changed ( 0 , Ġdata . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Add Ġsingle Ġitem Ġhere ĊĠĠĠ Ġinternal Ġfun Ġadd Item ( item : ĠE uru Search able Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdataset . add ( item ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠEmpty ListView Holder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) ĊĊĠĠĠ Ġinternal Ġinner Ġclass ĠSearch able Item ViewHolder ( item View : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġavatar : ĠCircular ImageView Ġ Ġby Ġbind View ( R . id . query _ image ) ĊĊĠĠĠĠĠĠĠ Ġval Ġusername : ĠBase line Grid TextView Ġby Ġbind View ( R . id . query _ name ) ĊĠĠĠĠĠĠĠ Ġval Ġaddress : ĠBase line Grid TextView ? Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ EMPTY Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ ITEM Ġ= Ġ 1 ĊĠĠĠ Ġ} Ċ Ċ } Ċ