package Ġcom . c zech . incident s Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics .* Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . c zech . incident s . databinding . Activity Maps Binding Ċ 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 . Bitmap Descriptor Factory Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . Marker Ċ import Ġcom . google . android . gms . maps . model . Marker Options Ċ import Ġcom . google . firebase . database .* Ċ import Ġde . hd od enh of . circle image view . Circle ImageView Ċ import Ġjava . util .* ĊĊ Ċ class ĠMaps Activity Ġ: ĠAppCompatActivity (), ĠOn Map Ready Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap : ĠGoogle Map ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Maps Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfirebase Database : ĠDatabase Reference ĊĊĠĠĠ Ġvar Ġstored Markers : ĠMap < String , ĠMarker > Ġ= ĠHashMap < String , ĠMarker >() ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Custom Marker ( context : ĠContext , Ġicon : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmarker : ĠView Ġ= Ġlayout Inflater . inflate ( R . layout . pin _ layout , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmarker Image Ġ= Ġmarker . findViewById ( R . id . user _ dp ) Ġas ĠCircle ImageView ĊĠĠĠĠĠĠĠ Ġmarker Image . setImage Resource ( icon ) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġ( context Ġas ĠActivity ). window Manager . default Display . get Metrics ( display Metrics ) ĊĠĠĠĠĠĠĠ ĠViewGroup . LayoutParams ( 5 2 , ĠViewGroup . LayoutParams . WRAP _ CONTENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġmarker . layout Params Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġmarker . measure ( display Metrics . width Pixels , Ġdisplay Metrics . height Pixels ) ĊĠĠĠĠĠĠĠ Ġmarker . layout ( 0 , Ġ 0 , Ġdisplay Metrics . width Pixels , Ġdisplay Metrics . height Pixels ) ĊĠĠĠĠĠĠĠ Ġmarker . build Drawing Cache () ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . meas ured Width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . meas ured Height , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . Config . ARGB _ 8 8 8 8 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġmarker . draw ( canvas ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Marker ( lat Lng : ĠLat Lng , Ġdescription : ĠString , Ġtype : ĠString , Ġicon : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmap . add Marker ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMarker Options () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ( lat Lng ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( type . uppercase ( Locale . getDefault ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. snippet ( description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. icon ( Bitmap Descriptor Factory . from Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Custom Marker ( this , Ġicon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Markers ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġsnapshot . key ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stored Markers . containsKey ( id )) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= Ġstored Markers [ id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker ?. remove () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġincident Update Listener Ġ= Ġobject Ġ: ĠChild EventListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Added ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġsnapshot . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoord Ġ= Ġsnapshot . child (" coordinates "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġsnapshot . child (" incident Type "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġsnapshot . child (" description "). value . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring LatLng Ġ= Ġcoord . split (',') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatitude Ġ= Ġstring LatLng [ 0 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġstring LatLng [ 1 ]. toDouble () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Lng Ġ= ĠLat Lng ( latitude , Ġlongitude ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= Ġstored Markers [ id ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( marker Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . position Ġ= Ġlat Lng ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" acc ident " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat Lng , Ġdescription , Ġtype , ĠR . drawable . acc ident ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" road Ġblock " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat Lng , Ġdescription , Ġtype , ĠR . drawable . road _ block ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" cri me / the ft " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat Lng , Ġdescription , Ġtype , ĠR . drawable . cri me ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" road Ġconstruction " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat Lng , Ġdescription , Ġtype , ĠR . drawable . road _ construction ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fire " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat Lng , Ġdescription , Ġtype , ĠR . drawable . fire ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" others " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Marker ( lat Lng , Ġdescription , Ġtype , ĠR . drawable . other ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Changed ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Removed ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Markers ( snapshot ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child Moved ( snapshot : ĠData Snapshot , Ġprevious Child Name : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Maps Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. 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 ĊĠĠĠĠĠĠĠ Ġfirebase Database Ġ= ĠFirebase Database . getInstance (). reference . child (" Incident s ") ĊĊĠĠĠĠĠĠĠ Ġfirebase Database . addChild EventListener ( incident Update Listener ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlatitude Ġ= Ġ 6 . 4 6 0 2 1 ĊĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġ 7 . 4 9 6 1 9 ĊĠĠĠĠĠĠĠ Ġval Ġzoom Level Ġ= Ġ 1 5 f ĊĊĠĠĠĠĠĠĠ Ġval Ġbase Location Ġ= ĠLat Lng ( latitude , Ġlongitude ) ĊĊĠĠĠĠĠĠĠ Ġmap . move Camera ( Camera Update Factory . new LatLng Zoom ( base Location , Ġzoom Level )) ĊĊĠĠĠĠĠĠĠ Ġon Map Click () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Map Click () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmap . setOn Map ClickListener Ġ{ Ġlat Lng Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Long Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocale . getDefault (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"% 1 \ $. 5 f , Ġ% 2 \ $. 5 f ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Lng . latitude , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Lng . longitude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Incident List Dialog ( lat Long ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Incident List Dialog ( coordinates : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Dialog Ġ= ĠInc ident List Activity () ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . putString (" coordinates ", Ġcoordinates ) ĊĠĠĠĠĠĠĠ Ġlist Dialog . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠ Ġlist Dialog . show ( support FragmentManager , Ġ" TAG ") ĊĊĠĠĠ Ġ} Ċ }