/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 2 1 ĠHERE ĠEurope ĠB . V . Ċ Ġ* Ċ Ġ* Ġ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 . here . ms dk ui app . map Ċ Ċ import Ġandroid . graphics . PointF Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġcom . here . android . mp a . common . ApplicationContext Ċ import Ġcom . here . android . mp a . common . Geo BoundingBox Ċ import Ġcom . here . android . mp a . common . Geo Coordinate Ċ import Ġcom . here . android . mp a . common . Map Engine Ċ import Ġcom . here . android . mp a . common . On Engine Init Listener Ċ import Ġcom . here . android . mp a . mapping .* Ċ import Ġcom . here . android . mp a . mapping . Map Ċ import Ġcom . here . android . mp a . mapping . On Map Render Listener Ċ import Ġcom . here . android . mp a . routing . Route Ċ import Ġcom . here . ms dk ui app . R Ċ import Ġcom . here . ms dk ui app . base . Ret ain Fragment Ċ import Ġcom . here . ms dk ui app . common . Provider Ċ import Ġkotlinx . android . extensions . Cache Implementation Ċ import Ġkotlinx . android . extensions . Container Options Ċ Ċ /** Ċ Ġ* ĠWrapper Ġover Ġ[ Map Fragment ] Ġto Ġdeal Ġwith Ġextra Ġfunctionality Ġover ĠMap . Ċ Ġ*/ Ċ @ Container Options ( Cache Implementation . NO _ CACHE ) Ċ class ĠMap Fragment Wrapper Ġ: ĠRet ain Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstate Ġ= ĠState () ĊĊĠĠĠ Ġinternal Ġvar Ġinjected Provider Ġ: ĠProvider ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġprivate Ġfield Ġto Ġbe Ġused Ġwithout Ġnull Ġcheck Ġin Ġthis Ġfile . ĊĠĠĠ Ġprivate Ġval Ġprovider Ġ: ĠProvider ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġinjected Provider Ġ?: ĠProvider () ĊĊĠĠĠ Ġprivate Ġval Ġmap View ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( view Ġas ? ĠMap View ) ĊĊĠĠĠ Ġinternal Ġvar Ġmap : ĠMap ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠMap Fragment Wrapper :: class . java . name ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMarker Ġanchor Ġpoint , Ġexpressed Ġas Ġfactor Ġto Ġbe Ġable Ġto Ġsupport Ġmarkers Ġin Ġall Ġresolution s . ĊĠĠĠĠĠĠĠĠ Ġ* ĠFactor Ġis Ġcalculated Ġ( x Ġis Ġcoordinate Ġin Ġasset Ġthat Ġwill Ġbe Ġan ch ored Ġto Ġmap ) Ġby : Ġx Ġ/ Ġasset Ġwidth . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġsame Ġfor Ġy Ġ( y Ġ/ Ġasset Ġheight ). ĠIf Ġdifferent Ġtypes Ġof Ġmarkers Ġ( eg . Ġpointing Ġpoint ĊĠĠĠĠĠĠĠĠ Ġ* Ġat Ġthe Ġtop Ġof Ġasset ) Ġwill Ġbe Ġadded Ġto Ġmap Ġthen Ġevery Ġtype Ġof Ġmarker Ġmust Ġhave Ġits Ġown Ġfactors . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThese Ġvalues Ġmust Ġbe Ġadjusted Ġif Ġmarker Ġassets Ġchange . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ X : ĠFloat Ġ= Ġ 0 . 4 9 f ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ Y : ĠFloat Ġ= Ġ 0 . 9 6 f ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠ Ġ* ĠPer centage Ġvalue Ġof Ġmarker Ġwidth Ġ/ Ġheight Ġthat Ġmargin Ġwill Ġbe Ġincreased Ġwhile Ġzoom ing ĊĠĠĠĠĠĠĠ Ġ* Ġto Ġroute Ġusing Ġ{@ link Ġ# zoom To BoundingBox With Margins ( Geo BoundingBox )} Ġfunction . ĊĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠADD ITION AL _ M ARGIN _ IN _ PERCENT AGE _ OF _ MARKER Ġ= Ġ 0 . 2 5 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgesture Listener Ġ= Ġobject Ġ: ĠMap Gesture . On Gesture Listener . On Gesture Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Press Event ( point : ĠPoint F ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Event ( point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonTap Event ( point : ĠPoint F ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Event ( point ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġhandle Event ( point : ĠPoint F ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ?. pixel To Geo ( point )?. run Ġpixel Coordinates @ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Marker ?. run Ġmap Marker @ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoordinate Ġ= Ġthis @ pixel Coordinates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Container ?. add Map Object ( this @ map Marker ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Handler ?. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ?. on Point Selected On Map ( this @ pixel Coordinates ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfragment Handler : ĠHandler ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġactivity ?. let Ġ{ ĠHandler ( it . main Looper ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġon Map Render Listener Ġ= Ġobject Ġ: ĠOn Map Render Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Draw () Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Post Draw ( invalid ated : ĠBoolean , Ġrender Time : ĠLong ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Size Changed ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . zoom To Route After MapView On Size Changed Pending ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . zoom To Route After MapView On Size Changed Pending Ġ= Ġ! zoom To BoundingBox With Margins ( state . route BoundingBox ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Graphics Detached () Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Render Buffer Created () Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprovider . provide MapView ( in flater . context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠViewGroup . LayoutParams ( ViewGroup . LayoutParams . MATCH _ PARENT , ĠViewGroup . LayoutParams . MATCH _ PARENT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġmap View ?. map Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġmap View ?. on Pause () ĊĠĠĠĠĠĠĠ Ġif ( Map Engine . isInitialized ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Engine . getInstance (). on Pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmap View ?. on Resume () ĊĠĠĠĠĠĠĠ Ġif ( Map Engine . isInitialized ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Engine . getInstance (). on Resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts ĠMap Ġengine . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġlistener Ġblock Ġmethod Ġto Ġbe Ġcalled Ġafter Ġmap Ġengine Ġinitialization . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart ( listener : Ġ(() Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate UI ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprovider . provide Map Engine (). init ( ApplicationContext ( activity !!. application Context )) Ġ{ Ġerr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( err Ġ== ĠOn Engine Init Listener . Error . NONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate UI ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġerr . name Ġ+ Ġ": Ġ" Ġ+ Ġerr . details ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġerr . details , ĠToast . LENGTH _ LONG )?. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate UI ( listener : Ġ(() Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ= Ġprovider . provide Map () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmap View ?. map Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View ?. map Ġ= Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View ?. add On Map Render Listener ( on Map Render Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . v ( TAG , Ġ" Success ") ĊĠĠĠĠĠĠĠ Ġview ?. content Description Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( state . map Container Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Container Ġ= Ġprovider . provides Map Container () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Container Ġ= Ġmap Container ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ?. add Map Object ( map Container ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( state . map Marker Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Marker Ġ= Ġget Map Marker ( R . drawable . ic _ add _ marker ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprepare Zoom Margins Acc ording To Markers () ĊĠĠĠĠĠĠĠ Ġchange Gesture () ĊĠĠĠĠĠĠĠ Ġlistener ?. invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠShows Ġor Ġhide Ġposition Ġindicator Ġwith Ġaccuracy Ġindicator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġis Show Ġtrue Ġif Ġposition Ġindicator Ġneeds Ġto Ġbe Ġshown , Ġfalse Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshow Position Indicator ( is Show : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġwith ( map View !!. position Indicator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Visible Ġ= Ġis Show ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Accuracy Indicator Visible Ġ= Ġis Show ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠR enders ĠRoute Ġon ĠMap . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġroute ĠRoute Ġto Ġbe Ġadded Ġon Ġmap . ĊĠĠĠĠ Ġ* Ġ@ param Ġwith Start Flag Ġtrue Ġif Ġstart Ġmarker Ġshould Ġbe Ġadded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrender Route ( route : ĠRoute , Ġwith Start Flag : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Map () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute From Provider Ġ= Ġprovider . provides Map Routes ( route ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Route Ġ= Ġroute From Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . route BoundingBox Ġ= Ġroute . bounding Box ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Map Object ( route From Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( with Start Flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Container ?. add Map Object ( getMap Marker ( R . drawable . ic _ route _ start , Ġroute . start )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Container ?. add Map Object ( getMap Marker ( R . drawable . ic _ route _ end , Ġroute . destination )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠZoom s Ġthe Ġmap Ġto Ġgiven Ġbounding Ġbox Ġ( add itionally Ġit Ġadds Ġmargins , Ġto Ġbe Ġsure Ġthat Ġmarkers ĊĠĠĠĠ Ġ* Ġare Ġfully Ġvisible ). ĊĠĠĠĠ Ġ* Ġ@ param Ġbox Ġ[ Geo BoundingBox ] ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġzoom To Ġfunction Ġhas Ġbeen Ġexecuted , Ġotherwise Ġfalse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġzoom To BoundingBox With Margins ( box : ĠGeo BoundingBox ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġbox ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Width Ġ= Ġwidth Ġ- Ġ 2 Ġ* Ġmax Of ( state . zoom Left Margin , Ġstate . zoom Right Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Height Ġ= Ġheight Ġ- Ġ 2 Ġ* Ġmax Of ( state . zoom Top Margin , Ġstate . zoom Bottom Margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Width Ġ> Ġ 0 Ġ&& Ġnew Height Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzoom To ( it , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap . Animation . LINEAR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap . MOVE _ PRE SER VE _ OR IENTATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠR enders ĠRoute Ġand Ġzoom Ġto Ġthis ĠRoute Ġafter Ġmap Ġsize Ġchanged ĊĠĠĠĠ Ġ* Ġ{@ link ĠOn Map Render Listener # on Size Changed ( int , Ġint )}. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġroute ĠRoute Ġto Ġbe Ġadded Ġand Ġz oo med Ġon Ġmap . ĊĠĠĠĠ Ġ* Ġ@ param Ġwith Start Flag Ġtrue Ġif Ġstart Ġmarker Ġshould Ġbe Ġadded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrender And Zoom To ( route : ĠRoute , Ġwith Start Flag : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrender Route ( route , Ġwith Start Flag ) ĊĠĠĠĠĠĠĠ Ġstate . zoom To Route After MapView On Size Changed Pending Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Map Marker ( image Id : ĠInt , Ġc ord : ĠGeo Coordinate ? Ġ= Ġnull ): ĠMap Marker Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= Ġprovider . provides Map Marker () ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġprovider . provides Image () ĊĠĠĠĠĠĠĠ Ġimage . setImage Resource ( image Id ) ĊĠĠĠĠĠĠĠ Ġmarker . icon Ġ= Ġimage ĊĠĠĠĠĠĠĠ Ġc ord ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . coordinate Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmarker . anchor Point Ġ= ĠPoint F ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . width . toFloat () Ġ* ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . height . toFloat () Ġ* ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ Y ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmarker ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġthe Ġmap Ġobject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġclear Map (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġret Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġstate . map Route ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ?. remove Map Object ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstate . map Container ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . removeAll Map Objects () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġret Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġret ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠThis Ġapplication Ġuses Ġtwo Ġmarkers : ĊĠĠĠĠ Ġ* ĠĠĠ Ġroute Ġstart Ġmarker Ġ- Ġic _ route _ start ĊĠĠĠĠ Ġ* ĠĠĠ Ġroute Ġend Ġmarker Ġ- Ġic _ route _ end ĊĠĠĠĠ Ġ* ĠThey Ġhave Ġidentical Ġsize Ġ( that 's Ġwhy Ġthe Ġsame Ġanchor Ġpoint Ġposition Ġis Ġused Ġfor Ġboth ĊĠĠĠĠ Ġ* Ġof Ġthem : ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ X , ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ Y ) Ġso Ġmargins Ġcalculated ĊĠĠĠĠ Ġ* Ġfor Ġone Ġmarker Ġwill Ġbe Ġproper Ġfor Ġboth Ġmarkers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġprepare Zoom Margins Acc ording To Markers () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġprovider . provides Image () ĊĠĠĠĠĠĠĠ Ġimage . setImage Resource ( R . drawable . ic _ route _ start ) ĊĊĠĠĠĠĠĠĠ Ġstate . zoom Left Margin Ġ= Ġ( image . width . toFloat () Ġ* ĠADD ITION AL _ M ARGIN _ IN _ PERCENT AGE _ OF _ MARKER Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . width . toFloat () Ġ* ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ X ). toInt () ĊĊĠĠĠĠĠĠĠ Ġstate . zoom Right Margin Ġ= Ġ( image . width . toFloat () Ġ* ĠADD ITION AL _ M ARGIN _ IN _ PERCENT AGE _ OF _ MARKER Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . width . toFloat () Ġ* Ġ( 1 . 0 Ġ- ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ X )). toInt () ĊĊĠĠĠĠĠĠĠ Ġstate . zoom Top Margin Ġ= Ġ( image . height . toFloat () Ġ* ĠADD ITION AL _ M ARGIN _ IN _ PERCENT AGE _ OF _ MARKER Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . height . toFloat () Ġ* ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ Y ). toInt () ĊĊĠĠĠĠĠĠĠ Ġstate . zoom Bottom Margin Ġ= Ġ( image . height . toFloat () Ġ* ĠADD ITION AL _ M ARGIN _ IN _ PERCENT AGE _ OF _ MARKER Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage . height . toFloat () Ġ* Ġ( 1 . 0 Ġ- ĠMARK ER _ AN CH OR _ POINT _ FACTOR _ Y )). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHandles Ġthe Ġback Ġbutton Ġpressed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġclear Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġtraffic : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Traffic Info Visible ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap ?. is Traffic Info Visible Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnable / disable Ġtouch Ġon Ġmap . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġenable Ġif Ġtrue Ġenable Ġthe Ġtouch , Ġotherwise Ġdisable Ġthe Ġtouch . ĊĠĠĠĠ Ġ* Ġ@ param Ġlistener Ġ[ Listener ] Ġfor Ġlisten Ġevent Ġof Ġtouch . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Touch ( enable : ĠBoolean , Ġlistener : ĠListener ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate . gesture Enable Ġ= Ġenable ĊĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġchange Gesture () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Gesture () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . gesture Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View ?. map Gesture ?. add On Gesture Listener ( gesture Listener , ĠInt . MAX _ VALUE , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . map Marker ?. let Ġ{ Ġstate . map Container ?. remove Map Object ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View ?. map Gesture ?. remove On Gesture Listener ( gesture Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠListener ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġfor ĠMap Ġevents . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCallback Ġto Ġindicate Ġtap Ġor Ġdouble Ġtap Ġon Ġmap . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġon Point Selected On Map ( cord : ĠGeo Coordinate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmap Marker : ĠMap Marker ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġmap Route : ĠMap Route ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġroute BoundingBox : ĠGeo BoundingBox ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġmap Container : ĠMap Container ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġgesture Enable Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġzoom Left Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġzoom Right Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġzoom Top Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġzoom Bottom Margin Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġzoom To Route After MapView On Size Changed Pending : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ }