package Ġpl . mg 6 . android . maps . extensions . demo Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . CheckBox Ċ import Ġandroid . widget . Seek Bar Ċ import Ġandroid . widget . TextView Ċ import Ġcom . android map se xt ensions .* Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . model . Bitmap Descriptor Factory Ċ import Ġjava . text . Coll ator Ċ import Ġjava . util .* Ċ Ċ class ĠDemo Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata Array Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠMutable Data ( 6 , ĠLat Lng (- 5 0 . 0 , Ġ 0 . 0 )), ĊĠĠĠĠĠĠĠ ĠMutable Data ( 2 8 , ĠLat Lng (- 5 2 . 0 , Ġ 1 . 0 )), ĊĠĠĠĠĠĠĠ ĠMutable Data ( 4 9 6 , ĠLat Lng (- 5 1 . 0 , Ġ- 2 . 0 )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠ Ġprivate Ġval Ġdata Updater : ĠRunnable Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġdata Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . value Ġ= Ġ 7 Ġ+ Ġ 3 Ġ* Ġdata . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Data Update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this , Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġcluster Size Seek bar : ĠSeek Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcluster Checkbox : ĠCheckBox ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . demo , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetUp Cluster ing Views ( view ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUp Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Circ les () ĊĠĠĠĠĠĠĠ Ġmap !!. setOn Map ClickListener ( object Ġ: ĠGoogle Map . On Map ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Map Click ( position : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( circle Ġin Ġmap !!. circ les ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( circle . contains ( position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast Helper . show Toast ( activity , Ġ" Clicked Ġ" Ġ+ Ġcircle . getData < Any >()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġupdate Cluster ing ( cluster Size Seek bar !!. progress , Ġcluster Checkbox !!. isChecked ) ĊĠĠĠĠĠĠĠ Ġmap !!. set Info Window Adapter ( object Ġ: ĠGoogle Map . Info Window Adapter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġtv : ĠTextView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcoll ator Ġ= ĠCol lator . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcomparator Ġ= ĠComparator < Marker > Ġ{ Ġlhs , Ġrhs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft Title Ġ= Ġlhs . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright Title Ġ= Ġrhs . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Title Ġ== Ġnull Ġ&& Ġright Title Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( left Title Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( right Title Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġcoll ator . compare ( left Title , Ġright Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Info Window ( marker : ĠMarker ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Info Contents ( marker : ĠMarker ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marker . is Cluster ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarkers Ġ= Ġmarker . markers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġ 3 Ġ&& Ġmarkers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠCollections . min ( markers , Ġcomparator ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġm . title Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarkers . remove ( m ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Markers Ġwith Ġmutable Ġdata " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( markers . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġ" and Ġ" Ġ+ Ġmarkers . size Ġ+ Ġ" Ġmore ..." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext . substring ( 0 , Ġtext . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv !!. text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marker . getData < Any >() Ġis ĠMutable Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmutable Data Ġ= Ġmarker . getData < Mutable Data >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv !!. text Ġ= Ġ" Value : Ġ${ mutable Data . value }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtv ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Ġ= ĠTextView ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv !!. setTextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġmap !!. setOn Info Window ClickListener ( object Ġ: ĠGoogle Map . On Info Window ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Info Window Click ( marker : ĠMarker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marker . is Cluster ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarkers Ġ= Ġmarker . markers ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠLat Lng Bounds . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarkers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . include ( it . position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġbuilder . build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap !!. animate Camera ( Camera Update Factory . new LatLng Bounds ( bounds , Ġresources . get Dimension Pixel Size ( R . dim en . padding ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠMarker Generator . add Markers In Pol and ( map ) ĊĠĠĠĠĠĠĠ ĠMarker Generator . add Markers In World ( map ) ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠBitmap Descriptor Factory . default Marker ( Bitmap Descriptor Factory . H UE _ BLUE ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( data Ġin Ġdata Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap !!. add Marker ( Marker Options (). position ( data . position ). icon ( icon ). data ( data )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġhandler . post ( data Updater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( data Updater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Data Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġmap !!. marker Showing Info Window ĊĠĠĠĠĠĠĠ Ġif Ġ(! m . is Cluster Ġ&& Ġm . getData < Any >() Ġis ĠMutable Data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm . show Info Window () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Circ les () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠstrokeWidth Ġ= Ġresources . get Dimension ( R . dim en . circle _ stroke _ width ) ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠCircle Options (). stroke Width ( stroke Width ) ĊĠĠĠĠĠĠĠ Ġmap !!. add Circle ( options . center ( LatLng ( 0 . 0 , Ġ 0 . 0 )). data (" first Ġcircle "). radius ( 2 0 0 0 0 0 0 . 0 )) ĊĠĠĠĠĠĠĠ Ġmap !!. add Circle ( options . center ( LatLng ( 3 0 . 0 , Ġ 3 0 . 0 )). data (" second Ġcircle "). radius ( 1 0 0 0 0 0 0 . 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Cluster ing Views ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcluster Checkbox Ġ= Ġview . findViewById < View >( R . id . checkbox _ cluster ) Ġas ĠCheckBox ĊĠĠĠĠĠĠĠ Ġcluster Size Seek bar Ġ= Ġview . findViewById < View >( R . id . seek bar _ cluster _ size ) Ġas ĠSeek Bar ĊĠĠĠĠĠĠĠ Ġcluster Checkbox !!. setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcluster Size Seek bar !!. isEnabled Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cluster ing ( cluster Size Seek bar !!. progress , Ġis Checked ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcluster Size Seek bar !!. setOn Seek Bar ChangeListener ( object Ġ: ĠSeek Bar . On Seek Bar ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( seek Bar : ĠSeek Bar ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( seek Bar : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Cluster ing ( progress , Ġcluster Checkbox !!. isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( seek Bar : ĠSeek Bar ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Cluster ing ( cluster Size Index : ĠInt , Ġenabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġclustering Settings Ġ= ĠCluster ing Settings () ĊĠĠĠĠĠĠĠ Ġclustering Settings . add Markers Dynamic ally ( true ) ĊĠĠĠĠĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclustering Settings . cluster Options Provider ( Demo Cluster Options Provider ( resources )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcluster Size Ġ= ĠCL USTER _ SIZ ES [ cluster Size Index ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclustering Settings . cluster Size ( cluster Size ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclustering Settings . enabled ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmap !!. set Cluster ing ( clustering Settings ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠMutable Data ( var Ġvalue : ĠInt , Ġval Ġposition : ĠLat Lng ) ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCL USTER _ SIZ ES Ġ= Ġdouble ArrayOf ( 1 8 0 . 0 , Ġ 1 6 0 . 0 , Ġ 1 4 4 . 0 , Ġ 1 2 0 . 0 , Ġ 9 6 . 0 ) ĊĠĠĠ Ġ} Ċ } Ċ