package Ġedu . stanford . m ial wo jr . my maps Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġedu . stanford . m ial wo jr . my maps . models . Place Ċ import Ġedu . stanford . m ial wo jr . my maps . models . User Map Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . io .* Ċ Ċ const Ġval ĠEX TRA _ USER _ MAP Ġ= Ġ" EXTRA _ USER _ MAP " Ċ const Ġval ĠEX TRA _ MAP _ TITLE Ġ= Ġ" EXTRA _ MAP _ TITLE " Ċ private Ġconst Ġval ĠFIL ENAME Ġ= Ġ" User Maps . data " Ċ private Ġconst Ġval ĠREQUEST _ CODE Ġ= Ġ 1 2 3 4 Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Maps : ĠMutable List < User Map > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmap Adapter : ĠMaps Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġuser Maps Ġ= Ġdeserialize User Maps ( this ). to Mutable List () ĊĠĠĠĠĠĠĠ Ġrv Maps . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġmap Adapter Ġ= ĠMaps Adapter ( this , Ġuser Maps , Ġobject Ġ: ĠMaps Adapter . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Item Click Ġ$ position ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ MainActivity , ĠDisplay Map Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ USER _ MAP , Ġuser Maps [ position ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Pending Transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . slide _ in _ right , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . anim . slide _ out _ left ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġrv Maps . adapter Ġ= Ġmap Adapter ĊĊĠĠĠĠĠĠĠ Ġfab Create Map . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Tap Ġon ĠF AB ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow AlertDialog ue () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow AlertDialog ue () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Form View Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . dialog _ create _ map , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Map Ġtitle ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( map Form View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" Cancel ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button (" OK ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠ Ġdialog . get Button ( DialogInterface . BUTTON _ POSITIVE ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġmap Form View . findViewById < EditText >( R . id . et Title ). text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Map Ġmust Ġhave Ġnon - empty Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ MainActivity , ĠCreate Map Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ MAP _ TITLE , Ġtitle ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Map Ġ= Ġdata ?. get Serializable Extra ( EXTRA _ USER _ MAP ) Ġas ĠUser Map ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" on Activity Result Ġwith Ġnew Ġmap Ġtitle Ġ${ user Map . title }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Maps . add ( user Map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Adapter . notify Item Inserted ( user Maps . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserialize User Maps ( this , Ġuser Maps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġserialize User Maps ( context : ĠContext , Ġuser Maps : ĠList < User Map >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" serialize User Maps ") ĊĠĠĠĠĠĠĠ ĠObject OutputStream ( File OutputStream ( getData File ( context ))). use Ġ{ Ġit . write Object ( user Maps ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdeserialize User Maps ( context : ĠContext ): ĠList < User Map > Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" deserialize User Maps ") ĊĠĠĠĠĠĠĠ Ġval Ġdata File Ġ= ĠgetData File ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! data File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Data Ġfile Ġdoes Ġnot Ġyet Ġexist ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠObject InputStream ( FileInputStream ( data File )). use Ġ{ Ġreturn Ġit . read Object () Ġas ĠList < User Map > Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData File ( context : ĠContext ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Getting Ġfile Ġfrom Ġdirectory Ġ${ context . files Dir }") ĊĠĠĠĠĠĠĠ Ġreturn ĠFile ( context . files Dir , ĠFIL ENAME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Sample Data (): ĠList < User Map > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mem ories Ġfrom ĠUniversity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" Br anner ĠHall ", Ġ" Best Ġd orm Ġat ĠStan ford ", Ġ 3 7 . 4 2 6 , Ġ- 1 2 2 . 1 6 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G ates ĠCS Ġbuilding ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Many Ġlong Ġn ights Ġin Ġthis Ġbase ment ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 7 . 4 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 2 2 . 1 7 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" P ink berry ", Ġ" First Ġdate Ġwith Ġmy Ġw ife ", Ġ 3 7 . 4 4 4 , Ġ- 1 2 2 . 1 7 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" January Ġvac ation Ġplanning !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" To ky o ", Ġ" Over night Ġlay over ", Ġ 3 5 . 6 7 , Ġ 1 3 9 . 6 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" R anch i ", Ġ" Family Ġvisit Ġ+ Ġw ed ding !", Ġ 2 3 . 3 4 , Ġ 8 5 . 3 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" Sing apore ", Ġ" In sp ired Ġby Ġ\" Cr azy ĠRich ĠAs ians \"", Ġ 1 . 3 5 , Ġ 1 0 3 . 8 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sing apore Ġtravel Ġit iner ary ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" G ard ens Ġby Ġthe ĠBay ", Ġ" A mazing Ġur ban Ġnature Ġpar k ", Ġ 1 . 2 8 2 , Ġ 1 0 3 . 8 6 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" J ur ong ĠB ird ĠPark ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Family - friendly Ġpar k Ġwith Ġmany Ġvar iet ies Ġof Ġbir ds ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 3 1 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 3 . 7 0 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" Sent osa ", Ġ" Is land Ġres ort Ġwith Ġpan or am ic Ġviews ", Ġ 1 . 2 4 9 , Ġ 1 0 3 . 8 3 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bot an ic ĠG ard ens ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" One Ġof Ġthe Ġworld 's Ġgreatest Ġt rop ical Ġg ard ens ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 3 1 3 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 3 . 8 1 5 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" My Ġfavorite Ġplaces Ġin Ġthe ĠMid west ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ch icago ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" U rb an Ġcenter Ġof Ġthe Ġmid west , Ġthe Ġ\" Wind y ĠCity \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 1 . 8 7 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 8 7 . 6 3 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" R oche ster , ĠM ich ig an ", Ġ" The Ġbest Ġof ĠDet ro it Ġsub urb ia ", Ġ 4 2 . 6 8 1 , Ġ- 8 3 . 1 3 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" M ack in aw ĠCity ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġentr ance Ġinto Ġthe ĠUpper ĠPen ins ula ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 5 . 7 7 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 8 4 . 7 2 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" M ich ig an ĠState ĠUniversity ", Ġ" Home Ġto Ġthe ĠS part ans ", Ġ 4 2 . 7 0 1 , Ġ- 8 4 . 4 8 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" University Ġof ĠM ich ig an ", Ġ" Home Ġto Ġthe ĠW olver ines ", Ġ 4 2 . 2 7 8 , Ġ- 8 3 . 7 3 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rest aurants Ġto Ġtry ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" Champ 's ĠD iner ", Ġ" Ret ro Ġd iner Ġin ĠBro ok lyn ", Ġ 4 0 . 7 0 9 , Ġ- 7 3 . 9 4 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" Al the a ", Ġ" Ch icago Ġup scale Ġd ining Ġwith Ġan Ġamazing Ġview ", Ġ 4 1 . 8 9 5 , Ġ- 8 7 . 6 2 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace (" Sh izen ", Ġ" E leg ant Ġs ush i Ġin ĠSan ĠFrancisco ", Ġ 3 7 . 7 6 8 , Ġ- 1 2 2 . 4 2 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" C it izen ĠE at ery ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" B right Ġc afe Ġin ĠA ustin Ġwith Ġa Ġp ink Ġrabbit ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 0 . 3 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 9 7 . 7 3 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" K ati ĠTh ai ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Auth entic ĠPort land ĠTh ai Ġfood , Ġserved Ġwith Ġlove ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 5 . 5 0 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 2 2 . 6 3 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }