package Ġedu . stanford . r mo kt ad . my maps Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . content . Context Compat Ċ Ċ 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 .* Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . maps . android . ui . Icon Generator Ċ import Ġedu . stanford . r mo kt ad . my maps . models . Place Ċ import Ġedu . stanford . r mo kt ad . my maps . models . User Map Ċ import Ġkotlinx . android . synt hetic . main . dialog _ create _ place .* Ċ Ċ const Ġprivate Ġval ĠTAG Ġ= Ġ" Create Map Activity " Ċ class ĠCreate Map Activity Ġ: ĠAppCompatActivity (), ĠOn Map Ready Callback Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Map : ĠGoogle Map ĊĠĠĠ Ġprivate Ġvar Ġmarkers : ĠMutable List < Marker > Ġ= Ġmutable ListOf < Marker >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ create _ map ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= Ġintent . getString Extra ( EXTRA _ MAP _ TITLE ) ĊĠĠĠĠĠĠĠ Ġ// Ġ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 ) ĊĊĠĠĠĠĠĠĠ Ġmap Fragment . view ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( it ," Long Ġpress Ġto Ġadd Ġa Ġmarker !", ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" OK ", Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction TextColor ( Context Compat . getColor ( this , Ġandroid . R . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ create _ map , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// check Ġif Ġ' item ' Ġis Ġsave Ġmenu Ġoption ĊĠĠĠĠĠĠĠ Ġif ( item . itemId Ġ== ĠR . id . mi Save ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" T apped Ġon Ġsave !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġempty Ġmap ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( markers . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" There Ġmust Ġbe Ġat Ġleast Ġone Ġmarker Ġon Ġthe Ġmap ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// create Ġa Ġmap Ġbased Ġon Ġmarker Ġdata Ġwe Ġhave ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// make Ġa Ġ" Place " Ġfor Ġeach Ġmarker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaces Ġ= Ġmarkers . map { marker Ġ-> ĠPlace ( marker . title , Ġmarker . snippet , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarker . position . latitude , Ġmarker . position . longitude ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Map Ġ= ĠUser Map ( intent . getString Extra ( EXTRA _ MAP _ TITLE ), Ġplaces ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX TRA _ USER _ MAP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġdata ) Ġ// pass Ġdata Ġback Ġto ĠMain ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () Ġ// finish Ġthis Ġactivity Ġand Ġgo Ġback Ġto Ġthe Ġparent Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMan ip ulates Ġthe Ġmap Ġonce Ġavailable . ĊĠĠĠĠ Ġ* ĠThis Ġcallback Ġis Ġtriggered Ġwhen Ġthe Ġmap Ġis Ġready Ġto Ġbe Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Map Ready ( google Map : ĠGoogle Map ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Map Ġ= Ġgoogle Map ĊĊĠĠĠĠĠĠĠ Ġm Map . setOn Info Window ClickListener Ġ{ marker ToDelete Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Window ClickListener - Ġdelete Ġthis Ġmarker ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarkers . remove ( marker ToDelete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarker ToDelete . remove () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Map . setOn Map Long ClickListener Ġ{ lat Lng Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Map Long ClickListener ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow AlertDialog ( lat Lng ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġmarker Ġin ĠSil icon ĠV alley Ġand Ġmove Ġthe Ġcamera ĊĠĠĠĠĠĠĠ Ġval Ġsil icon Val ley Ġ= ĠLat Lng ( 3 7 . 4 , Ġ- 1 2 2 . 1 ) ĊĠĠĠĠĠĠĠ Ġ// Zoom Ġlevel Ġis Ġ# Ġbetween Ġ 1 Ġ( whole Ġworld ) Ġand Ġ 2 1 Ġ( down Ġat Ġstreet Ġlevel ) ĊĠĠĠĠĠĠĠ Ġm Map . move Camera ( Camera Update Factory . new LatLng Zoom ( sil icon Val ley , Ġ 1 0 f )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow AlertDialog ( lat Lng : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplace Form View Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . dialog _ create _ place , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Create Ġa Ġmarker ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( place Form View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" OK ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠ Ġdialog . get Button ( DialogInterface . BUTTON _ POSITIVE ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġplace Form View . findViewById < EditText >( R . id . et Title ). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace Form View . findViewById < EditText >( R . id . et Description ). text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . trim (). isEmpty () Ġ|| Ġdescription . trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġ" Place Ġmust Ġhave Ġnon - empty Ġtitle Ġand Ġdescription ", ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġicon Generator Ġ= ĠIcon Generator ( this ); ĊĊĠĠĠĠĠĠĠ Ġ// Create Ġcustom Ġicon Ġfor Ġmarkers Ġ( speech Ġbubble ) ĊĠĠĠĠĠĠĠ Ġicon Generator . setStyle ( Icon Generator . STYLE _ PUR PLE ); ĊĠĠĠĠĠĠĠ Ġ// Put Ġtitle Ġinside Ġspeech Ġbubble ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġicon Generator . make Icon ( title ); ĊĠĠĠĠĠĠĠ Ġ// ĠUse ĠBitmap Descriptor Factory Ġto Ġcreate Ġthe Ġmarker ĊĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠBitmap Descriptor Factory . from Bitmap ( bitmap ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmarker Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Map . add Marker ( Marker Options (). position ( lat Lng ). title ( title ). snippet ( description ). icon ( icon )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarkers . add ( marker ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ