package Ġcom . example . area ad vice . activities Ċ Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Html Ċ import Ġandroid . text . method . Link Movement Method Ċ import Ġandroid . widget .* Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġcom . example . area ad vice . R Ċ import Ġcom . example . area ad vice . storage . Database Places Ċ import Ġcom . example . area ad vice . storage . Prefs Ċ import Ġcom . example . area ad vice . utils . km To Mi Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġkotlin . math .* ĊĊ Ċ class ĠLocation Info Menu Ġ: ĠAppCompatActivity () Ġ Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloc Name : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloc Address : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloc Prox imity : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloc Schedule : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloc Rating : ĠRating Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġphoto : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Url : ĠTextView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . fragment _ location _ info _ menu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġshared Prefs Ġ= ĠP refs ( this ) ĊĠĠĠĠĠĠĠ Ġloc Name Ġ= ĠfindViewById ( R . id . location Name ) ĊĠĠĠĠĠĠĠ Ġloc Address Ġ= ĠfindViewById ( R . id . location Address ) ĊĠĠĠĠĠĠĠ Ġloc Prox imity Ġ= ĠfindViewById ( R . id . location Prox imity ) ĊĠĠĠĠĠĠĠ Ġloc Schedule Ġ= ĠfindViewById ( R . id . location Hours ) ĊĠĠĠĠĠĠĠ Ġloc Rating Ġ= ĠfindViewById ( R . id . rating Bar ) ĊĠĠĠĠĠĠĠ Ġphoto Ġ= ĠfindViewById ( R . id . photo ) ĊĠĠĠĠĠĠĠ Ġview Url Ġ= ĠfindViewById ( R . id . url ) ĊĠĠĠĠĠĠĠ Ġval Ġsave Btn Ġ= ĠfindViewById < Image Button >( R . id . save Btn ) ĊĠĠĠĠĠĠĠ Ġval Ġdel Btn Ġ= ĠfindViewById < Image Button >( R . id . del Btn ) ĊĠĠĠĠĠĠĠ Ġval ĠtextView Reviews Ġ= ĠfindViewById < TextView >( R . id . textView Reviews ) ĊĊĠĠĠĠĠĠĠ Ġloc Name . text Ġ= Ġintent . getString Extra (" name ") ĊĠĠĠĠĠĠĠ Ġloc Address . text Ġ= Ġintent . getString Extra (" address ") ĊĠĠĠĠĠĠĠ Ġloc Rating . rating Ġ= Ġintent . getString Extra (" rating ") !!. toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġlat Ġ= Ġintent . getDouble Extra (" latitude ", 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġlng Ġ= Ġintent . getDouble Extra (" longitude ", 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Lat Ġ= Ġintent . get Float Extra (" lat ", 0 F ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Lng Ġ= Ġintent . get Float Extra (" long ", 0 F ) ĊĠĠĠĠĠĠĠ Ġval Ġopen Ġ= Ġintent . getString Extra (" isOpen ") ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġintent . getString Extra (" url ") ĊĠĠĠĠĠĠĠ Ġview Url . text Ġ= Ġurl ĊĠĠĠĠĠĠĠ Ġview Url . movement Method Ġ= ĠLink Movement Method . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġphoto Ref Ġ= Ġintent . getString Extra (" photo ") ĊĠĠĠĠĠĠĠ Ġphoto . content Description Ġ= Ġloc Name . text . toString () ĊĊĠĠĠĠĠĠĠ ĠtextView Reviews . text Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHtml . from Html ( intent . getString Extra (" reviews "), ĠHtml . FROM _ HTML _ MODE _ COMP ACT ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHtml . from Html ( intent . getString Extra (" reviews ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( photo Ref Ġ!= Ġ" null ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFit Ġphoto Ġon Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġ( Resources . getSystem (). display Metrics . width Pixels Ġ* Ġ 0 . 9 ). round ToInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ> Ġ 1 6 0 0 ) Ġwidth Ġ= Ġ 1 6 0 0 Ġ// Ġmax Ġwidth Ġaccepts Ġ 1 Ġto Ġ 1 6 0 0 Ġpixels ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠapiKey Ġ= ĠgetString ( R . string . google _ places _ key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto ImageUrl Ġ= Ġ" https :// maps . googleapis . com / maps / api / place / photo ? max width =$ width " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"& photo reference =$ photo Ref & key =$ apiKey " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Image ( photo ImageUrl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġdistance Between Points ( lat , Ġlng , Ġcurrent Lat . toDouble (), Ġcurrent Lng . toDouble ()) ĊĠĠĠĠĠĠĠ Ġif ( shared Prefs . units Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloc Prox imity . text Ġ= ĠString . format ("% . 2 f Ġkm ", Ġdistance ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloc Prox imity . text Ġ= ĠString . format ("% . 2 f Ġmi ", Ġkm To Mi ( distance . toFloat ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFormat Ġschedule ĊĠĠĠĠĠĠĠ Ġval Ġschedule 2 Ġ= Ġintent . getString Extra (" schedule ") ĊĠĠĠĠĠĠĠ Ġval Ġschedule Ġ= Ġschedule 2 !!. split (",") ĊĊĠĠĠĠĠĠĠ Ġloc Schedule . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( day Ġin Ġschedule ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġday . replace ("[ ","" ). replace (" ] "," ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" \"", Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str Ġ== Ġ" null ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloc Schedule . text Ġ= ĠgetString ( R . string . no _ schedule ) Ġ// Ġno Ġschedule Ġis Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠChange Ġconstraints Ġof Ġreviews Ġto Ġbe Ġbelow Ġdelete Ġbutton ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreview Params Ġ= ĠtextView Reviews . layout Params Ġas ĠConstraint Layout . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreview Params . top To Bottom Ġ= Ġdel Btn . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView Reviews . request Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( str . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloc Schedule . text Ġ= ĠString . format ("% s % s \ n ", Ġloc Schedule . text . toString (), Ġstr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsave Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠDatabase Places ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrepeat Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdb . getAll Rows () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġlocation Ġis Ġa Ġrepeat Ġusing Ġthe Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( cursor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . getString ( getColumnIndex OrThrow ( Database Places . Col _ Address )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== Ġloc Address . text . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! repeat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Val Ġ= ĠContent Values (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ place _ Name , Ġloc Name . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Address , Ġloc Address . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Rating , Ġloc Rating . rating . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave ĠHTML Ġmarkup ! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Reviews , Ġintent . getString Extra (" reviews ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Lat , Ġintent . getDouble Extra (" latitude ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Lng , Ġintent . getDouble Extra (" longitude ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Schedule , Ġschedule 2 . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Open , Ġopen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Url , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Database Places . Col _ Photo , Ġphoto Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Info Ġ= Ġdb . writable Database ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Info . insert ( Database Places . Table _ Name , Ġnull , Ġadd Val ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Your Ġlocation Ġhas Ġbeen Ġsaved !", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" This Ġlocation Ġis Ġalready Ġsaved .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdel Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠDatabase Places ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrepeat Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdb . getAll Rows () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( cursor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . getString ( getColumnIndex ( Database Places . Col _ Address )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ== Ġloc Address . text . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġthis . getInt ( getColumnIndex ( Database Places . Col _ Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( repeat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb . delete Row ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġlocation Ġhas Ġbeen Ġdeleted ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġlocation Ġis Ġnot Ġsaved Ġin Ġthe Ġdatabase ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Image ( url : ĠString ){ ĊĠĠĠĠĠĠĠ ĠPic asso . get (). load ( url ). into ( photo ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun Ġdistance Between Points ( lat 1 : ĠDouble , Ġlong 1 : ĠDouble , Ġlat 2 : ĠDouble , Ġlong 2 : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġavg Radius Ġ= Ġ 6 3 7 1 . 0 Ġ// Ġradius Ġof ĠEarth Ġin Ġkm ĊĠĠĠ Ġval Ġlat Distance Ġ= ĠMath . to Radians ( lat 1 Ġ- Ġlat 2 ) ĊĠĠĠ Ġval Ġlong Distance Ġ= ĠMath . to Radians ( long 1 Ġ- Ġlong 2 ) ĊĊĠĠĠ Ġval Ġa Ġ= ĊĠĠĠĠĠĠĠ Ġ( sin ( lat Distance Ġ/ Ġ 2 ) Ġ* Ġsin ( lat Distance Ġ/ Ġ 2 )) Ġ+ Ġ( cos ( Math . to Radians ( lat 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġcos ( Math . to Radians ( lat 2 )) Ġ* Ġsin ( long Distance Ġ/ Ġ 2 ) Ġ* Ġsin ( long Distance Ġ/ Ġ 2 )) ĊĠĠĠ Ġval Ġc Ġ= Ġ 2 * Ġatan 2 ( sqrt ( a ), Ġsqrt ( 1 Ġ- Ġa )) ĊĊĠĠĠ Ġreturn Ġavg Radius Ġ* Ġc Ġ// Ġin Ġk ilo meters Ċ } Ċ