/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠI ce Rock ĠMAG ĠInc . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġdev . icer ock . mo ko . maps . mapbox Ċ Ċ import Ġcoco apods . Map box . MGL Annotation Image Ċ import Ġcoco apods . Map box . MGL Annotation Protocol Ċ import Ġcoco apods . Map box . MGL Camera Change Reason Ċ import Ġcoco apods . Map box . MGL Camera Change Reason Gesture Pan Ċ import Ġcoco apods . Map box . MGL Camera Change Reason Gesture Pin ch Ċ import Ġcoco apods . Map box . MGL Camera Change Reason Gesture Zoom In Ċ import Ġcoco apods . Map box . MGL Camera Change Reason Gesture Zoom Out Ċ import Ġcoco apods . Map box . MGL MapView Ċ import Ġcoco apods . Map box . MGL MapView Delegate Protocol Ċ import Ġcoco apods . Map box . MG LO rn ament Visibility Ċ import Ġdev . icer ock . mo ko . geo . LatLng Ċ import Ġdev . icer ock . mo ko . graphics . Color Ċ import Ġdev . icer ock . mo ko . maps . Map Address Ċ import Ġdev . icer ock . mo ko . maps . Map Controller Ċ import Ġdev . icer ock . mo ko . maps . Map Element Ċ import Ġdev . icer ock . mo ko . maps . Marker Ċ import Ġdev . icer ock . mo ko . maps . Zoom Config Ċ import Ġdev . icer ock . mo ko . resources . Image Resource Ċ import Ġplatform . Core Location . CL Location Ċ import Ġplatform . Core Location . CL Location Manager Ċ import Ġplatform . Foundation . NS URL Ċ import Ġplatform . UIKit . hidden Ċ import Ġplatform . darwin . NSObject Ċ import Ġkotlin . native . ref . Weak Reference Ċ Ċ actual Ġclass ĠMap box Controller ( ĊĠĠĠ Ġmap View : ĠM GL MapView Ċ ) Ġ: ĠMap Controller Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlocation Manager Ġ= ĠCL Location Manager () ĊĠĠĠ Ġprivate Ġval Ġdelegate Ġ= ĠMap Delegate ( this ) ĊĊĠĠĠ Ġprivate Ġval Ġdefault Minimum Zoom : ĠDouble Ġ= Ġ 0 . 0 ĊĠĠĠ Ġprivate Ġval Ġdefault Maximum Zoom : ĠDouble Ġ= Ġ 2 2 . 0 ĊĊĠĠĠ Ġprivate Ġval Ġweak MapView Ġ= ĠWeak Reference ( map View ) ĊĊĠĠĠ Ġprivate Ġvar Ġis Map Loaded : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġactual Ġvar ĠonStart Scroll Callback : Ġ(( is User Gesture : ĠBoolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. delegate Ġ= Ġdelegate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Location (): ĠLat Lng Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation : ĠCL Location Ġ= Ġweak MapView . get ()?. user Location ?. location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġlocation Manager . location ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" can 't Ġget Ġlocation ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlocation . coordinate . to LatLng () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġsuspend Ġfun Ġread Ui Settings (): ĠUi Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap View Ġ= Ġweak MapView . get () ĊĠĠĠĠĠĠĠ Ġreturn ĠUi Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomp ass Enabled Ġ= Ġmap View ?. compass View ?. compass Visibility Ġ!= ĠMG LO rn ament Visibility . MG LO rn ament Visibility Hidden , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Location Enabled Ġ= Ġmap View ?. shows User Location Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Gest ures Enabled Ġ= Ġmap View ?. scroll Enabled Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom Gest ures Enabled Ġ= Ġmap View ?. zoom Enabled Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt ilt Gest ures Enabled Ġ= Ġmap View ?. pitch Enabled Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotate Gest ures Enabled Ġ= Ġmap View ?. rotate Enabled Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogo Is Visible Ġ= Ġmap View ?. logo View ?. hidden ?. not () Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Button Is Visible Ġ= Ġmap View ?. at tribution Button ?. hidden ?. not () Ġ?: Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġsuspend Ġfun Ġwrite Ui Settings ( settings : ĠUi Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . compass View . compass Visibility Ġ= Ġif Ġ( settings . compass Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMG LO rn ament Visibility . MG LO rn ament Visibility Adaptive ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMG LO rn ament Visibility . MG LO rn ament Visibility Hidden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . shows User Location Ġ= Ġsettings . my Location Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . scroll Enabled Ġ= Ġsettings . scroll Gest ures Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . rotate Enabled Ġ= Ġsettings . rotate Gest ures Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . zoom Enabled Ġ= Ġsettings . zoom Gest ures Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . pitch Enabled Ġ= Ġsettings . tilt Gest ures Enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . logo View . hidden Ġ= Ġsettings . logo Is Visible . not () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . at tribution Button . hidden Ġ= Ġsettings . info Button Is Visible . not () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetCurrent Zoom (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġweak MapView . get ()?. zoom Level ?. toFloat () Ġ?: Ġ 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠsetCurrent Zoom ( zoom : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. zoom Level Ġ= Ġzoom . toDouble () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Zoom Config (): ĠZoom Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠZoom Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Ġ= Ġweak MapView . get ()?. minimum Zoom Level ?. toFloat (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġweak MapView . get ()?. maximum Zoom Level ?. toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġset Zoom Config ( config : ĠZoom Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. minimum Zoom Level Ġ= Ġconfig . min ?. toDouble () Ġ?: Ġdefault Minimum Zoom ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. maximum Zoom Level Ġ= Ġconfig . max ?. toDouble () Ġ?: Ġdefault Maximum Zoom ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Map Center LatLng (): ĠLat Lng Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġweak MapView . get ()?. camera ?. center Coordinate ?. to LatLng () Ġ?: ĠLat Lng ( latitude Ġ= Ġ 0 . 0 , Ġlongitude Ġ= Ġ 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Location ( lat Lng : ĠLat Lng , Ġzoom : ĠFloat , Ġanimation : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. set Center Coordinate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Coordinate Ġ= Ġlat Lng . to Coord 2 D (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzoom Level Ġ= Ġzoom . toDouble (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimated Ġ= Ġif Ġ( is Map Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow My Location ( zoom : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠgetCurrent Location () ĊĠĠĠĠĠĠĠ Ġshow Location ( lat Lng Ġ= Ġlocation , Ġzoom Ġ= Ġzoom , Ġanimation Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠNeed Ġimplementation Ġfor Ġrotation ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd Marker ( ĊĠĠĠĠĠĠĠ Ġimage : ĠImage Resource , ĊĠĠĠĠĠĠĠ Ġlat Lng : ĠLat Lng , ĊĠĠĠĠĠĠĠ Ġrotation : ĠFloat , ĊĠĠĠĠĠĠĠ ĠonClick : Ġ(() Ġ-> ĠUnit )? ĊĠĠĠ Ġ): ĠMarker Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= ĠMap box Annotation () ĊĠĠĠĠĠĠĠ Ġannotation . set Coordinate ( coordinate Ġ= Ġlat Lng . to Coord 2 D ()) ĊĠĠĠĠĠĠĠ Ġannotation . onClick Ġ= ĠonClick ĊĠĠĠĠĠĠĠ Ġannotation . image Ġ= Ġimage . to UI Image () ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. add Annotation ( annotation ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠMap box Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Ġ= Ġannotation , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweak MapView . get ()?. remove Annotation ( annotation Ġ= Ġannotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġactual Ġfun Ġset Style Url ( style Url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġweak MapView . get ()?. style URL Ġ= ĠNSURL ( string Ġ= Ġstyle Url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠNeed Ġimplementation ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġbuild Route ( ĊĠĠĠĠĠĠĠ Ġpoints : ĠList < LatLng >, ĊĠĠĠĠĠĠĠ Ġline Color : ĠColor , ĊĠĠĠĠĠĠĠ Ġmarkers Image : ĠImage Resource ? ĊĠĠĠ Ġ): ĠMap Element Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠNeed Ġimplementation ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Address By LatLng ( latitude : ĠDouble , Ġlongitude : ĠDouble ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠNeed Ġimplementation ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Similar Near Addresses ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString ?, ĊĠĠĠĠĠĠĠ Ġmax Results : ĠInt , ĊĠĠĠĠĠĠĠ Ġmax Radius : ĠInt ĊĠĠĠ Ġ): ĠList < Map Address > Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ", Ġ" CONF LI CT ING _ OVERLOAD S ") ĊĠĠĠ Ġprivate Ġclass ĠMap Delegate ( ĊĠĠĠĠĠĠĠ Ġmap Controller : ĠMap box Controller ĊĠĠĠ Ġ) Ġ: ĠNSObject (), ĠM GL MapView Delegate Protocol Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap Controller Ġ= ĠWeak Reference ( map Controller ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap View Did Finish Loading Map ( map View : ĠM GL MapView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Controller . get ()?. is Map Loaded Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap View : ĠM GL MapView , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregion Will Change With Reason : ĠM GL Camera Change Reason , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimated : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( region Will Change With Reason ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM GL Camera Change Reason Gesture Pan , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM GL Camera Change Reason Gesture Zoom In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM GL Camera Change Reason Gesture Zoom Out , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM GL Camera Change Reason Gesture Pin ch Ġ-> Ġmap Controller . get ()?. onStart Scroll Callback ?. invoke ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmap Controller . get ()?. onStart Scroll Callback ?. invoke ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap View ( map View : ĠM GL MapView , Ġimage For Annotation : ĠM GL Annotation Protocol ): ĠM GL Annotation Image ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġimage For Annotation Ġas ĠMap box Annotation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġannotation . image ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM GL Annotation Image . annotation Image With Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġimage , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreuse Identifier Ġ= Ġimage . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap View ( map View : ĠM GL MapView , Ġdid Select Annotation : ĠM GL Annotation Protocol ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( did Select Annotation Ġas ĠMap box Annotation ). onClick ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } ĊĊ