package Ġcom . example . maps Ċ Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ Ċ 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 Ċ import Ġcom . google . android . gms . maps . model . Marker Options Ċ import Ġcom . google . firebase . Firebase App Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġkotlinx . android . synt hetic . main . activity _ maps .* Ċ Ċ class ĠMaps Activity Ġ: ĠAppCompatActivity (), ĠOn Map Ready Callback , ĠAdapter View . On ItemSelected Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Map : ĠGoogle Map ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb : ĠFirebase Fire store ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ maps ) ĊĠĠĠĠĠĠĠ Ġ// ĠObtain Ġthe ĠSupport Map Fragment Ġand Ġget Ġnotified Ġwhen Ġthe Ġmap Ġis Ġready Ġto Ġbe Ġused . ĊĠĠĠĠĠĠĠ Ġval Ġmap Fragment Ġ= Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Fragment ById ( R . id . map ) Ġas ĠSupport Map Fragment ĊĠĠĠĠĠĠĠ Ġmap Fragment . getMap Async ( this ) ĊĊĠĠĠĠĠĠĠ ĠFirebase App . initialize App ( this ) ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠĠĠĠĠ Ġpopulate Spinner () ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Add Ġlocation ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinear Ġ= ĠLinearLayout ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear . orientation Ġ= ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Input Ġ= ĠEditText ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Input . hint Ġ= Ġ" Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Input Ġ= ĠEditText ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Input . hint Ġ= Ġ" Longitude " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatitude Input Ġ= ĠEditText ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Input . hint Ġ= Ġ" Latitude " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear . addView ( name Input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear . addView ( longitude Input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear . addView ( latitude Input ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setView ( linear ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" OK ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġname Input . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlatitude Ġ= Ġlatitude Input . text . toString (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlongitude Ġ= Ġlongitude Input . text . toString (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ref Ġ= Ġdb . collection (" locations "). document () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= Ġdoc Ref . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠLocation ( doc Id , Ġname , Ġlongitude , Ġlatitude ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations . add Location ( location , Ġdoc Ref , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Cancel ") Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMan ip ulates Ġthe Ġmap Ġonce Ġavailable . ĊĠĠĠĠ Ġ* ĠThis Ġcallback Ġis Ġtriggered Ġwhen Ġthe Ġmap Ġis Ġready Ġto Ġbe Ġused . ĊĠĠĠĠ Ġ* ĠThis Ġis Ġwhere Ġwe Ġcan Ġadd Ġmarkers Ġor Ġlines , Ġadd Ġlisteners Ġor Ġmove Ġthe Ġcamera . ĠIn Ġthis Ġcase , ĊĠĠĠĠ Ġ* Ġwe Ġjust Ġadd Ġa Ġmarker Ġnear ĠSy dn ey , ĠA ustralia . ĊĠĠĠĠ Ġ* ĠIf ĠGoogle ĠPlay Ġservices Ġis Ġnot Ġinstalled Ġon Ġthe Ġdevice , Ġthe Ġuser Ġwill Ġbe Ġpromp ted Ġto Ġinstall ĊĠĠĠĠ Ġ* Ġit Ġinside Ġthe ĠSupport Map Fragment . ĠThis Ġmethod Ġwill Ġonly Ġbe Ġtriggered Ġonce Ġthe Ġuser Ġhas ĊĠĠĠĠ Ġ* Ġinstalled ĠGoogle ĠPlay Ġservices Ġand Ġreturned Ġto Ġthe Ġapp . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Map Ready ( google Map : ĠGoogle Map ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Map Ġ= Ġgoogle Map ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġmarker Ġin ĠSy dn ey Ġand Ġmove Ġthe Ġcamera ĊĠĠĠĠĠĠĠ Ġval Ġw ro Ġ= ĠLat Lng ( 5 1 . 0 , Ġ 1 7 . 0 ) ĊĠĠĠĠĠĠĠ Ġm Map . add Marker ( Marker Options (). position ( w ro ). title (" Marker Ġin ĠW ro ")) ĊĠĠĠĠĠĠĠ Ġm Map . move Camera ( Camera Update Factory . new LatLng Zoom ( w ro , Ġ 1 0 f )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate Spinner () Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . collection (" locations ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ Ġdocuments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( document Ġin Ġdocuments ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġdocument . toObject ( Location :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoc ations . add Location ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Adapter Ġ= ĠArray Adapter ( this , Ġandroid . R . layout . simple _ spinner _ item , ĠLoc ations . getAll Locations ()) ĊĠĠĠĠĠĠĠ Ġarray Adapter . set DropDown View Resource ( android . R . layout . simple _ spinner _ dropdown _ item ) ĊĠĠĠĠĠĠĠ Ġspinner . adapter Ġ= Ġarray Adapter ĊĊĠĠĠĠĠĠĠ Ġspinner . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View <* >, Ġview : ĠView , Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Maps Activity , Ġparent . getItem At Position ( position ). toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" dup a ", ĠLoc ations . getAll Locations ()[ position ]. name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCode Ġto Ġperform Ġsome Ġaction Ġwhen Ġnothing Ġis Ġselected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" dup a ", Ġ" nic ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( parent : ĠAdapter View <* >, Ġview : ĠView , Ġposition : ĠInt , Ġid : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAn Ġitem Ġwas Ġselected . ĠYou Ġcan Ġretrieve Ġthe Ġselected Ġitem Ġusing ĊĠĠĠĠĠĠĠ Ġ// Ġparent . getItem At Position ( pos ) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Maps Activity , Ġparent . getItem At Position ( position ). toString (), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ ĠLog . d (" dup a ", ĠLoc ations . getAll Locations ()[ position ]. name ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġ( parent . getItem At Position ( position ) Ġas ĠLocation ). longitude ĊĠĠĠĠĠĠĠ Ġval Ġlat Ġ= Ġ( parent . getItem At Position ( position ) Ġas ĠLocation ). latitude ĊĠĠĠĠĠĠĠ Ġm Map . move Camera ( Camera Update Factory . new LatLng ( LatLng ( lat !! , Ġlong !! ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( parent : ĠAdapter View <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAnother Ġinterface Ġcallback ĊĠĠĠĠĠĠĠ ĠLog . d (" dup a ", Ġ" nic 1 ") ĊĠĠĠ Ġ} Ċ Ċ } Ċ