package Ġcom . example . map marker . view Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . example . domain . coordinate . Coordinate Ċ import Ġcom . example . domain . coordinate . value Object . Latitude Ċ import Ġcom . example . domain . coordinate . value Object . Longitude Ċ import Ġcom . example . domain . marker . Marker Ċ import Ġcom . example . map marker . R Ċ import Ġcom . example . map marker . databinding . Marker MapView Binding Ċ import Ġcom . example . map marker . extensions . to LatLng Ċ import Ġcom . example . map marker . cluster Utils . Cluster Renderer Ċ import Ġcom . example . map marker . cluster Utils . Marker Cluster Ċ import Ġcom . google . android . gms . maps . Camera Update Factory Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . On Map Ready Callback Ċ import Ġcom . google . android . gms . maps . Support Map Fragment Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġcom . google . maps . android . clustering . ClusterManager Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlin . coroutines . Coroutine Context Ċ Ċ class ĠMarker MapView Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ), ĠOn Map Ready Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcluster Manager : ĠCluster Manager < Marker Cluster > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap : ĠGoogle Map ĊĠĠĠ Ġprivate Ġvar Ġmarker Map Interface : ĠMarker Map Listener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlast Lng Bounds : ĠLat Lng Bounds ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġ= ĊĠĠĠĠĠĠĠ ĠMarker MapView Binding . inflate ( LayoutInflater . from ( context ), Ġthis , Ġtrue ) ĊĊĠĠĠ Ġfun Ġinit ( fragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġfragment Manager . find Fragment ById ( R . id . map ) Ġas ĠSupport Map Fragment ĊĠĠĠĠĠĠĠ Ġmap Fragment . getMap Async ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Ready ( google Map : ĠGoogle Map ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ= Ġgoogle Map ĊĠĠĠĠĠĠĠ Ġmarker Map Interface ?. on Map Ready () ĊĠĠĠĠĠĠĠ Ġcluster Manager Ġ= ĠCluster Manager ( context , Ġmap ) ĊĠĠĠĠĠĠĠ Ġcluster Manager . renderer Ġ= ĠCluster Renderer ( context , Ġmap , Ġcluster Manager ) ĊĠĠĠĠĠĠĠ Ġmap . setOn Camera Idle Listener ( cluster Manager ) ĊĠĠĠĠĠĠĠ Ġmap . setOn Marker ClickListener ( cluster Manager ) ĊĠĠĠĠĠĠĠ Ġval Ġl is bo a Coordinate Ġ= ĠCoordinate ( Latitude ( 3 8 . 7 3 6 9 4 6 ), ĠLong itude (- 9 . 1 4 2 6 8 5 )) ĊĠĠĠĠĠĠĠ Ġmap . move Camera ( Camera Update Factory . new LatLng Zoom ( lis bo a Coordinate . to LatLng (), Ġ 1 5 f )) ĊĠĠĠĠĠĠĠ Ġmap . ui Settings . is Zoom Controls Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmap . ui Settings . is Map Toolbar Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġmap . setOn Camera Idle Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . projection . visible Region . lat Lng Bounds . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Lng Bounds Ġ!= Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker Map Interface ?. on Camera Idle ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Lng Bounds Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Marker Map Listener ( listener : ĠMarker Map Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . marker Map Interface Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Marker ( markers : ĠList < Marker >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Ids Ġ= Ġmarkers . map Ġ{ Ġit . id . value Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcluster Includes Ġ= Ġcluster Manager . algorithm . items . filter Ġ{ Ġ! new Ids . contains ( it . id ) Ġ} ĊĠĠĠĠĠĠĠ Ġcluster Manager . remove Items ( cluster Includes ) ĊĠĠĠĠĠĠĠ Ġval Ġincludes Ids Ġ= Ġcluster Manager . algorithm . items . map Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠ Ġcluster Manager . add Items ( markers . filter Ġ{ Ġ! includes Ids . contains ( it . id . value ) Ġ}. map Ġ{ ĠMarker Cluster . from Marker ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġcluster Manager . cluster () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġfun Ġset Location Enabled ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . is My Location Enabled Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠMarker Map Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Map Ready () ĊĠĠĠĠĠĠĠ Ġfun Ġon Camera Idle ( lat Lng Bounds : ĠLat Lng Bounds ) ĊĠĠĠ Ġ} Ċ Ċ }