package Ġcom . alk u rop . street view marker Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . Frame Layout Ċ import Ġcom . google . android . gms . maps . Street View Pan orama Ċ import Ġcom . google . android . gms . maps . Street View Pan orama View Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Street View Pan orama Camera Ċ import Ġjava . util . HashSet Ċ Ċ class ĠStreet Marker View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠĠĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ), ĊĠĠĠ ĠI Street Overlay View Ġ{ ĊĊĠĠĠ Ġinternal Ġval Ġmarker View : ĠStreet Overlay View ĊĠĠĠ Ġinternal Ġval Ġstreet View : ĠStreet View Pan orama View ĊĠĠĠ Ġinternal Ġval Ġtouch Overlay : ĠTouch Overlay View ĊĊĠĠĠ Ġvar Ġon Street Loaded Success : Ġ(( Boolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Camera Update Listener : Ġ(( Camera Position ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Marker ClickListener : Ġ(( Place ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Marker Long ClickListener : Ġ(( Place ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġmaps Config : ĠMaps Config ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker View . maps Config Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmarker View . maps Config ĊĊĠĠĠ Ġinternal Ġvar Ġmarker DataList Ġ= Ġhash Set Of < Place >() ĊĠĠĠ Ġinternal Ġvar Ġcam : ĠStreet View Pan orama Camera Ġ= ĠStreet View Pan orama Camera ( 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠ Ġinternal Ġvar Ġposition : ĠLat Lng ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġcallback : Ġ( Street View Pan orama ) Ġ-> ĠUnit ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . v sm _ view _ street _ marker , Ġthis ) ĊĠĠĠĠĠĠĠ Ġmarker View Ġ= ĠfindViewById ( R . id . overlay ) ĊĠĠĠĠĠĠĠ Ġstreet View Ġ= ĠfindViewById ( R . id . pan orama ) ĊĠĠĠĠĠĠĠ Ġtouch Overlay Ġ= ĠfindViewById ( R . id . touch ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Location Update ( location : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . on Location Update ( location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Camera Update ( camera Position : ĠStreet View Pan orama Camera ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . on Camera Update ( camera Position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . onClick () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Long Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . on Long Click () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Local ClickListener ( on ClickListener : Ġ(( data : ĠMarker Draw Data ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . set Local ClickListener ( on ClickListener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Camera Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtemp Position Ġ= Ġposition ĊĠĠĠĠĠĠĠ Ġif Ġ( temp Position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Position Ġ= ĠCamera Position ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLat Lng ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Position . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Position . longitude ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġcam ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Camera Update Listener ?. invoke ( update Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Marker Click er ( geo Data : ĠMarker Geo Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( geo Data . distance Ġ>= Ġmaps Config . marker Min Position To MoveTo Marker Ġ/ Ġ 1 0 0 0 . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġmaps Config . navigate To Location On Marker Click ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus To Location ( geo Data . place . location ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon Marker ClickListener ?. invoke ( geo Data . place ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Marker Long Click er ( geo Data : ĠMarker Geo Data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Marker Long ClickListener ?. invoke ( geo Data . place ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// CONTRO LS ĊĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmarker View . on Touch Event ( event ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Long ClickListener ( on ClickListener : Ġ(( Marker Draw Data ) Ġ-> ĠUnit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View ?. set Long ClickListener ( on ClickListener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfocus To Location ( location : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstreet View . get Street View Pan orama Async Ġ{ Ġpan orama Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpan orama . setPosition ( LatLng ( location . latitude , Ġlocation . longitude )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Camera Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Markers ( markers : ĠHashSet < Place >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . set Markers ( markers ) ĊĠĠĠĠĠĠĠ Ġmarker DataList . clear () ĊĠĠĠĠĠĠĠ Ġmarker DataList . addAll ( markers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// State Ġcallbacks ĊĊĠĠĠ Ġfun ĠonCreate ( state : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstreet Bundle Ġ= Ġstate ?. get Bundle (" street View ") ĊĠĠĠĠĠĠĠ Ġstreet View . onCreate ( street Bundle ) ĊĠĠĠĠĠĠĠ Ġcallback Ġ= Ġ{ Ġpan orama Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker View . on Camera Update ( pan orama . pan orama Camera ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpan orama . setOn Street View Pan orama Camera ChangeListener Ġ{ Ġcamera Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcam Ġ= Ġcamera Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker View . on Camera Update ( camera Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Camera Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpan orama . setOn Street View Pan orama ChangeListener Ġ{ Ġcamera Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Position Ġ!== Ġnull Ġ&& Ġcamera Position . position Ġ!== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker View . on Location Update ( camera Position . position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġcamera Position . position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Camera Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Street Loaded Success ?. invoke ( camera Position Ġ!== Ġnull Ġ&& Ġcamera Position . links Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpan orama . setOn Street View Pan orama ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpan orama . setOn Street View Pan orama Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Long Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstreet View . get Street View Pan orama Async ( callback ) ĊĠĠĠĠĠĠĠ Ġtouch Overlay . on Touch Listener Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker View . on Touch Event ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmarker View . set Long ClickListener Ġ{ Ġon Marker Long Click er ( it . matrix Data . data ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġmarker View . set Local ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Marker Click er ( it . matrix Data . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmarker View . set Long ClickListener Ġ{ Ġon Marker Long Click er ( it . matrix Data . data ) Ġ} ĊĠĠĠĠĠĠĠ Ġrestore State ( state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestore State ( save State : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsave State ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparcel able Array Ġ= Ġsave State . get Parcelable Array (" marker Models ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġparcel able Array !!. map Ġ{ Ġit Ġas ĠPlace Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker DataList Ġ= Ġ( map ). to HashSet () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmarker View . set Markers ( marker DataList ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Save InstanceState ( state : ĠBundle ?): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġstate Ġ?: ĠBundle () ĊĠĠĠĠĠĠĠ Ġval ĠarrayOf Places Ġ= Ġmarker DataList . to Typed Array () ĊĠĠĠĠĠĠĠ Ġbundle . put Parcelable Array (" marker Models ", ĠarrayOf Places ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbundle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġstreet View . on Resume () ĊĠĠĠĠĠĠĠ Ġmarker View . post Delayed ({ Ġmarker View . on Camera Update ( cam ) Ġ}, Ġ 3 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . pause () ĊĠĠĠĠĠĠĠ Ġstreet View . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonStart () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġmarker View . stop () ĊĠĠĠĠĠĠĠ Ġstreet View . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Low Memory () Ġ= Ġstreet View . on Low Memory () ĊĊĠĠĠ Ġ}